首页 文章

将所有JSON值转换为字符串

提问于
浏览
0

在java中我有JSON,其中所有值都必须更改为字符串 . 值可以是数字,布尔值,null或任何值 .

{
    "obj1": [{
        "n1": "n",
        "n2": 1,
        "n3": true
    },
    {
        "n1": "n",
        "n2": 1,
        "n3": null
    }]
}

预期的结果是所有值都应格式化为 string .

Example:

{
    "obj1": [{
        "n1": "n",
        "n2": "1",
        "n3": "true"
    },
    {
        "n1": "n",
        "n2": "1",
        "n3": "null"
    }]
}

通过迭代JSON对象,我们可以做到这一点,但有没有更简单的方法来做到这一点,其中迭代工作就像使用lambda函数一样 .

1 回答

  • 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"}]}
    

相关问题