如何在Java中正确格式化JSON字符串?

5
我有一个Jersey客户端,从一个源获取JSON,我需要将其转换为格式正确的JSON:
当通过HTTP请求获取时,我的JSON字符串如下所示:
{
    "properties": [
        {
            someproperty: "aproperty",
            set of data: {
                keyA: "SomeValueA",
                keyB: "SomeValueB",
                keyC: "SomeValueC"
            }
        }
    ]
}

我遇到了问题,因为json必须格式正确,keyA、keyB和keyC没有用引号括起来。是否有一些库可以帮助添加引号或最佳方法将此字符串转换为格式正确的json?或者是否有一种简单的方法可以将其转换为json对象,而不需要编写与传入结构相匹配的变量和列表的大量类?

想要一个将这样的字符串转换为JSON的示例。据我所知,Jackson要求JSON字符串格式正确(即所有键都需要在键周围加上双引号)。 - Rolando
4个回答

5

您可以使用json-lib。它非常方便!您可以按照以下方式构建JSON字符串:

JSONObject dataSet = new JSONObject();
dataSet.put("keyA", "SomeValueA") ;
dataSet.put("keyB", "SomeValueB") ;
dataSet.put("keyC", "SomeValueC") ;

JSONObject someProperty = new JSONObject();
dataSet.put("someproperty", "aproperty") ;

JSONArray properties = new JSONArray();
properties.add(dataSet);
properties.add(someProperty);

当然,你可以通过调用properties.toString()轻松获取JSON字符串。


我想将现有的JSON字符串转换为带有双引号的格式正确的JSON字符串。 - Rolando
尝试使用 JSONObject.fromObject(jsonString).toString - Cruis

3

我喜欢 Flexjson,并使用大量初始化器

  public static void main(String[] args) {

    Map<String, Object> object = new HashMap<String, Object>() {
        {
            put("properties", new Object[] { new HashMap<String, Object>() {
                {
                    put("someproperty", "aproperty");
                    put("set of dada", new HashMap<String, Object>() {
                        {
                            put("keyA", "SomeValueA");
                            put("keyB", "SomeValueB");
                            put("keyC", "SomeValueC");
                        }
                    });
                }
            } });
        }
    };

    JSONSerializer json = new JSONSerializer();
    json.prettyPrint(true);
    System.out.println(json.deepSerialize(object));
  }

会导致以下结果:

{
  "properties": [
    {
        "someproperty": "aproperty",
        "set of dada": {
            "keyA": "SomeValueA",
            "keyB": "SomeValueB",
            "keyC": "SomeValueC"
        }
    }
  ]
}

3

您的字符串不是JSON格式,只是类似于JSON。在任何JSON格式中都没有这些引号是可选的。据我所知,没有库可以读取您的字符串并处理缺失的引号并正确地将其回传。您需要找到生成该字符串的代码,并修复它以生成实际的JSON。


0
你可以使用argo,这是一个简单的Java JSON解析器和生成器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接