#java #json #string
#java #json #строка
Вопрос:
У меня есть строка :
String str = "[{\n \"country_group\": [\"Asia\"],\n \"country\": [\n \"IND\" , \"China\"\n ]\n },\n {\n \"country_group\": [\"NAmerica\"],\n \"country\": [\n \"US\"\n ]\n }]";
В Sysout это дает мне :
[{n "country_group": ["Asia"],n "country": [n "IND" , "China"n ]n },n {n "country_group": ["NAmerica"],n "country": [n "US"n ]n }]
Я хочу преобразовать ее в обычную строку, которая в sysout даст мне вывод ниже :
[{
"country_group": ["Asia"],
"country": [
"IND" , "China"
]
},
{
"country_group": ["NAmerica"],
"country": [
"US"
]
}]
Моя конечная цель — преобразовать ее в JSONObject. Если я получу этот приведенный выше вывод, я смогу это сделать.
Редактировать: я ищу функцию, которая напрямую преобразует это. без использования каких-либо регулярных выражений.
Комментарии:
1. Для этого сообщества обидно иметь таких некомпетентных участников .. будучи новичком, я чувствую, что мог бы провести некоторое исследование и смогу получить ответ, но здесь люди с гораздо большим опытом также не могут ответить на него. действительно грустно это видеть.
Ответ №1:
во-первых, я хотел бы обратиться к вашему собственному комментарию. Я думаю, что это неуместно, тем более, что вы, вероятно, могли бы найти много контента для данной проблемы, и, пожалуйста, дайте сообществу время увидеть ваш вопрос и ответить на него.
Что касается данной проблемы, как вы уже заметили, вы имеете дело с вводом JSON. Когда имеешь дело с чем-то подобным, лучше всего использовать стороннюю библиотеку, чтобы о вас позаботились и вы сэкономили на этом много времени.
Моя рекомендация в этой ситуации — использовать библиотеки Gson или JSONOrg. Теперь это библиотеки для чтения JSON как «обычной» строки, так что вы можете играть с ней, изменять ее или делать все, что вам нравится. Но мы сталкиваемся с другой проблемой, она заключается в том, что мы должны «отменить экранирование» строки. К счастью, это также решаемо с помощью библиотеки, в данном случае Apache commons. Таким образом, код для «отмены экранирования» строки будет выглядеть следующим образом.
StringEscapeUtils.unescapeJson(str)
Теперь, когда мы с этим разобрались, мы можем обработать JSON, если пожелаем.
public class TestClass {
public String convertWithGson(String jsonInput) {
GsonBuilder gsonBuilder;
Gson gson;
gsonBuilder = new GsonBuilder();
gsonBuilder.setPrettyPrinting();
gson = gsonBuilder.create();
CountryTest[] countryTest = gson.fromJson(jsonInput, CountryTest[].class);
/*
Do with the object what you like
*/
return gson.toJson(countryTest);
}
public String convertWithJSONOrg(String jsonInput) {
JSONTokener jsonTokener = new JSONTokener(jsonInput);
JSONArray jsonArray = new JSONArray(jsonTokener);
return jsonArray.toString(2);
}
}
Gson больше подходит, если вы хотите легко сопоставлять объекты и манипулировать ими с помощью Java.
Класс CountryTest:
public class CountryTest {
private List<String> country_group;
private List<String> country;
}
Со всеми получателями и установщиками, конечно.
Запуск будет выглядеть так:
public static void main(String[] args) {
TestClass testClass = new TestClass();
String str = "[{\n \"country_group\": [\"Asia\"],\n \"country\": [\n \"IND\" , \"China\"\n ]\n },\n {\n \"country_group\": [\"NAmerica\"],\n \"country\": [\n \"US\"\n ]\n }]";
System.out.println(testClass.convertWithGson(StringEscapeUtils.unescapeJson(str)));
System.out.println("-----------");
System.out.println(testClass.convertWithJSONOrg(StringEscapeUtils.unescapeJson(str)));
}
С выводом:
[
{
"country_group": [
"Asia"
],
"country": [
"IND",
"China"
]
},
{
"country_group": [
"NAmerica"
],
"country": [
"US"
]
}
]
-----------
[
{
"country": [
"IND",
"China"
],
"country_group": ["Asia"]
},
{
"country": ["US"],
"country_group": ["NAmerica"]
}
]
Process finished with exit code 0
Я надеюсь, что я был полезен, и, пожалуйста, не торопитесь, программирование — это очень весело, но не то, что мы хотим торопить. Это всегда возвращается к нам.