将所有JSON值转换为字符串

时间:2018-12-09 10:47:34

标签: java

在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函数一样。

1 个答案:

答案 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"}]}