首页 > 解决方案 > 将所有 JSON 值转换为字符串

问题描述

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

标签: java

解决方案


您可以为此定义一个递归函数,例如stringify,具有三种情况:

  • 如果是 a JSONObject,则将所有值替换为stringified
  • 如果是 a 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"}]}

推荐阅读