java - 将所有 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 函数一样。
解决方案
您可以为此定义一个递归函数,例如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"}]}
推荐阅读
- mysql - 在 MySql 查询中构造 JSON 对象时取消引用值
- wpf - XAML 错误:不知道如何检测 ReactiveUI.RoutedViewHost 何时激活/停用
- python - 在模块odoo localhost上添加字段
- javascript - 从(上一个调用)最后一个结果值循环 json 调用
- ios - 如何在 GLKView 上绘制圆角透明矩形
- sql-server - 多参数值逻辑
- angularjs - 从控制器关闭 md 菜单
- c# - 如何获取当前聚焦窗口的选定文本?
- ros - 从 MoveIt 导出数学公式
- angular - 如果使用双向数据绑定,Angular2+ 不会在更改时执行设置功能代码