小编今天在工作工程中,遇到了一个处理json字符串的问题,经过半小时的测试,最终解决了此问题!记录一下,为后来人铺路。 小编先说一下需求哈: 我们要把json字符串中的指定key的value修改并重新返回一个修改后的json字符串!
简单说就是:把
[{"childs":[{"address":"山东","phone":"12344444"}],
"password":"123","username":"wang"}]
childs集合里新增一条,然后再替换一下原来的json字符串
[{"childs":[{"address":"北京","phone":"21212121"},
{"address":"山东","phone":"12344444"}],"password":"123","username":"wang"}]
现在大家知道我们的目的了吧!那就开始解决问题!!!我们以FastJson为例,虽然他有风险,但是小编还是喜欢用这个!
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
我们先准备好json字符串:
{"childs":[{"address":"北京","phone":"21212121"},
{"address":"山东","phone":"12344444"}],"password":"123","username":"wang"}
直接测试:
public class JsonTest {
public static void main(String[] args) {
Json json = new Json();
json.setPassword("123");
json.setUsername("wang");
List<Json.Child> childs = new ArrayList<>();
Json.Child child = new Json.Child();
child.setAddress("山东");
child.setPhone("12344444");
Json.Child child2 = new Json.Child();
child2.setAddress("北京");
child2.setPhone("21212121");
childs.add(child2);
childs.add(child);
json.setChilds(childs);
// 准备数据
String jsonString = JSON.toJSONString(json);
System.out.println(jsonString);
String jsonEdit = jsonEdit(jsonString);
System.out.println(jsonEdit);
}
private static String jsonEdit(String json){
// 首先转化为jsonObject对象,为了后面我们更新key对应的value做准备
JSONObject jsonObject = JSONObject.parseObject(json);
// 把json里的childs拿出来新增一个对象
String childs = JSONObject.parseObject(json).getString("childs");
List<Json.Child> jsonList = JSON.parseArray(childs, Json.Child.class);
Json.Child child = new Json.Child();
child.setPhone("110");
child.setAddress("青岛市");
jsonList.add(child);
// 把修改后的内容替换原来的value
jsonObject.put("childs",jsonList);
String jsonString = jsonObject.toString();
return jsonString;
}
}
测试结果:
{"password":"123","childs":[{"address":"北京","phone":"21212121"},
{"address":"山东","phone":"12344444"},
{"address":"青岛市","phone":"110"}],"username":"wang"}
这样就完成了哈,小编在测试中多toString()了一下,就出现多\和"
找了好一会,分享一个去的方法,不是使用replace替换的!不过已经过时了,大家有好的方法也可以评论区留言哈
String newString = StringEscapeUtils.unescapeJson("要被转化的json字符串");
Q.E.D.