JSON字符串如下:{"device_id": "gh_4da91c444fee_8c04d0b766780c62","device_type":"gh_4da91c444fee","msg_type":"notify","data":"jlfjsdlkjflk","services":{"operation_status":{"status": 0},"lightbulb":{"alpha":70}}}我先替换status和alpha的值, 但是每一次更换的值是不固定的,你有什么方法可以替换吗
你可以用fastjson,将json字符串转成对象,然后进行数值替换
json对象,在java中其实就是map
public void test(){
/*
{
"device_id": "gh_4da91c444fee_8c04d0b766780c62",
"device_type": "gh_4da91c444fee",
"msg_type": "notify",
"data": "jlfjsdlkjflk",
"services": {
"operation_status": {
"status": 0
},
"lightbulb": {
"alpha": 70
}
}
}
*/
String jsonStr = "";
//转换成JSON对象
JSONObject jsonObj = JSONObject.parseObject(jsonStr);
//根据key获取对象
JSONObject services = jsonObj.getJSONObject("services");
JSONObject operation_status = services.getJSONObject("operation_status");
operation_status.put("status", 1);
JSONObject lightbulb = services.getJSONObject("lightbulb");
lightbulb.put("alpha", 100);
jsonStr = jsonObj.toJSONString();
}
不如直接反序列化为java对象或JSON对象,然后再修改。
如果一定要通过修改字符串的方式,那就必须使用正则表达式了。 如.replace("\"status\":\d+", "\status\":"+status)
先将json字符串解析为对象,再修改对象的属性,再转换为字符串吧。目前第三方的json解析的jar包用起来挺方便的,比如GSON,fastjson。