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

Выполняя итерацию по объекту JSON, мы можем сделать это. Тогда сделай это так.
Themelis 09.12.2018 12:06

Я думаю, вы должны хотя бы указать, какую json-библиотеку вы используете ...

Aki 09.12.2018 12:13

Я использую библиотеку org.json

ashok 09.12.2018 12:18
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
574
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"}]}

Другие вопросы по теме