我从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"}
最好和最有效的方法是什么?
答案 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