如何在Java中将String附加到JSON字符串?

时间:2014-01-08 21:17:42

标签: java json string

我从Zookeeper节点获取数据,如此

byte[] bytes = client.getData().forPath("/my/example/node1");
String ss = new String(bytes);

此处ss将包含这样的数据,这是一个由键值对组成的简单JSON字符串 -

{"description":"Some Text", "machinename":"machineA", "ipaddress":"192.128.0.0"}

现在我想在末尾向上面的JSON字符串添加一个键值对。这是我要追加的下面的键值对 -

"version":"v3"

所以最终的JSON字符串看起来像这样 -

{"description":"Some Text", "machinename":"machineA", "ipaddress":"192.128.0.0", "version":"v3"}

最好和最有效的方法是什么?

3 个答案:

答案 0 :(得分:6)

使用JSON Parser / Generator将您给定的JSON解析为树结构,然后添加您的JSON字段。

使用Gson,看起来像这样

Gson gson = new Gson();
JsonObject jsonObject = gson.fromJson(ss, JsonObject.class); // parse
jsonObject.addProperty("version", "v3"); // modify
System.out.println(jsonObject); // generate

打印

{"description":"Some Text","machinename":"machineA","ipaddress":"192.128.0.0","version":"v3"}

Zookeeper是否总是返回有效的JSON或其自定义格式?请注意这一点。

答案 1 :(得分:1)

在JSON处理方面,字符串操作仅适用于特殊和简单的情况。对于一般情况,应该使用一个好的JSON解析器库。

Jackson在性能,效率,多功能性和可靠性方面属于此类库中的佼佼者,并且在商业友好型Apache 2.0 license下发布。

以下是Jackson中所请求答案的简单实现。

public static void main(String[] args)
{
    String ss = "{\"description\":\"Some Text\", \"machinename\":\"machineA\", \"ipaddress\":\"192.128.0.0\"}";

    System.out.println("JSON string before: " + ss);

    try
    {
        ObjectMapper mapper = new ObjectMapper();
        Map<String, String> map = (Map<String, String>)mapper.readValue(ss, Map.class);

        map.put("version", "v3");
        ss = mapper.writeValueAsString(map);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    System.out.println("JSON string after: " + ss);
}

答案 2 :(得分:0)

基本字符串操作。在最后的闭括号之前插入附加字符串}。请务必添加逗号。

不需要订购Json对象。

String json = "{\"key1\":\"value1\",\"key2\":\"value2\"}";

String json2 = "\"version\":\"v3\"";

json2 = ',' + json2;

String json3 = json.substring(0,json.length()-1) + json2 + json.charAt(json.length()-1);

这应该是最简单,最有效的方式,如果这就是你需要做的全部。

有关字符串操作的其他阅读,

http://docs.oracle.com/javase/tutorial/java/data/manipstrings.html