преобразовать разделенную запятыми строку в json в Java - PullRequest
0 голосов
/ 02 июня 2018

У меня есть строка, разделенная запятыми, которую нужно преобразовать в строку JSON. Когда я выполняю преобразование JSONArray, оно все еще находится в формате массива.Каков наилучший способ решить это.

String str="art,0.0, comedy,0.0, action,0.0, crime,0.0, animals,0.0"

ожидаемый вывод

{"art":"0.0", "comedy":"0.0","action":"0.0","crime":"0.0","animals":"0.0"}

Вот код, который я пробовал

String [] arrayStr=strVal.split(",");
JSONArray mJSONArray = new JSONArray();
for (String s: arrayStr){
    mJSONArray.put(s);
}
System.out.println(mJSONArray.toString());

output

["art","0.0"," comedy","0.0"," action","0.0"," crime","0.0"," animals","0.0"]

Ответы [ 3 ]

0 голосов
/ 02 июня 2018

Похоже, что вы хотите использовать JSONObject, а не JSONArray, чтобы получить желаемый результат.т.е. просто добавьте элементы к объекту - jsonObject.put (ключ, значение)

0 голосов
/ 02 июня 2018

Для такого тривиального примера довольно просто создать плохо сформированный JSON String вашего контента и позволить JSONObject исправить его.

В одном выражении:

new JSONObject(String.format("{%s}", str.replaceAll("([^,]+),([^,]+)(,|$)", "$1:$2,")))
// {"art":0,"comedy":0,"action":0,"crime":0,"animals":0}

Если вы действительно хотите сохранить 0.0 как String s:

new JSONObject(String.format("{%s}", str.replaceAll("([^,]+),([^,]+)(,|$)", "$1:\"$2\",")))
// {"art":"0.0","comedy":"0.0","action":"0.0","crime":"0.0","animals":"0.0"}

Если вы хотите учесть возможные посторонние пробелы:

new JSONObject(String.format("{%s}", str.replaceAll("([^,]+)\\s*?,\\s*?([^,]+)(,|$)", "$1:$2,")))

..будет работать с входными данными, такими как "art, 0.0, comedy, 0.0, action, 0.0, crime, 0.0, animals, 0.0" и другими случаями.


Отказ от ответственности: это не сумасшедший сексуальный код, а добавление однострочного комментария, и это может быть разумным, если структура данных остается упрощенной.

0 голосов
/ 02 июня 2018

Вы должны использовать карту вместо массива (список пар ключ / значение - карта, а не массив).

1 способ: использование JsonObject

String [] arrayStr=strVal.split(",");
JsonObjectBuilder builder = Json.createObjectBuilder()

String key = null;
for (String s: arrayStr){
    if(key == null) {
       key = s;
    } else {
       builder.add(key, s);
       key = null;
    }
}
JsonObject value = builder.build();

2 способ: использование карты

String [] arrayStr=strVal.split(",");
Map<String,String> map = new HashMap<>();

String key = null;
for (String s: arrayStr){
    if(key == null) {
       key = s;
    } else {
       map.put(key, s);
       key = null;
    }
}

// convert Map to Json using any Json lib (Gson, Jackson and so on)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...