在Java中,我有JSON,其中所有值都必须更改为字符串。这些值可以是数字,布尔值,空值或其他任何值。
{
"obj1": [{
"n1": "n",
"n2": 1,
"n3": true
},
{
"n1": "n",
"n2": 1,
"n3": null
}]
}
预期结果是所有值都应格式化为string
。
示例:
{
"obj1": [{
"n1": "n",
"n2": "1",
"n3": "true"
},
{
"n1": "n",
"n2": "1",
"n3": "null"
}]
}
通过遍历JSON对象,我们可以做到这一点,但是有没有更简单的方法可以做到这一点,其中迭代的工作方式就像使用lambda函数一样。
答案 0 :(得分:1)
您可以为此定义一个递归函数,例如stringify
,它具有以下三种情况:
JSONObject
,请用stringified
值替换所有值JSONArray
,请用stringified
元素替换所有元素String.valueOf
类似这样的东西:
public Object stringify(Object x) {
if (x instanceof JSONObject) {
JSONObject obj = (JSONObject) x;
for (String key : obj.keySet()) {
obj.put(key, stringify(obj.get(key)));
}
} else if (x instanceof JSONArray) {
JSONArray arr = (JSONArray) x;
for (int i = 0; i < arr.length(); i++) {
arr.put(i, stringify(arr.get(i)));
}
} else {
x = String.valueOf(x);
}
return x;
}
示例和应用:
String s = "{\"obj1\": [{\"n1\": \"n\",\"n2\": 1,\"n3\": true},{\"n1\": \"n\",\"n2\": 1,\"n3\": null}]}";
JSONObject obj = new JSONObject(s);
obj = (JSONObject) stringify(obj);
// {"obj1":[{"n1":"n","n2":"1","n3":"true"},{"n1":"n","n2":"1","n3":"null"}]}