В 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 мы можем сделать это, но есть ли более простой способ сделать это, в котором итерация работает позади, как при использовании лямбда-функции.
Я думаю, вы должны хотя бы указать, какую json-библиотеку вы используете ...
Я использую библиотеку org.json




Вы можете определить для этого рекурсивную функцию, скажем stringify, имеющую три случая:
JSONObject, замените все значения на значения stringifiedJSONArray, замените все элементы на элементы stringifiedString.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"}]}