Вопрос-ответ

Parsing JSON Object in Java [duplicate]

Синтаксический анализ объекта JSON в Java [дубликат]

У меня есть объект JSON следующим образом:

member = "{interests : [{interestKey:Dogs}, {interestKey:Cats}]}";

В Java я хочу проанализировать приведенный выше объект json и сохранить значения в arraylist.

Я ищу какой-нибудь код, с помощью которого я мог бы добиться этого.

Переведено автоматически
Ответ 1

Я предполагаю, что вы хотите сохранить интересующие вас ключи в виде списка.

Использование библиотеки org.json:

JSONObject obj = new JSONObject("{interests : [{interestKey:Dogs}, {interestKey:Cats}]}");

List<String> list = new ArrayList<String>();
JSONArray array = obj.getJSONArray("interests");
for(int i = 0 ; i < array.length() ; i++){
list.add(array.getJSONObject(i).getString("interestKey"));
}
Ответ 2
public class JsonParsing {

public static Properties properties = null;

public static JSONObject jsonObject = null;

static {
properties = new Properties();
}

public static void main(String[] args) {

try {

JSONParser jsonParser = new JSONParser();

File file = new File("src/main/java/read.json");

Object object = jsonParser.parse(new FileReader(file));

jsonObject = (JSONObject) object;

parseJson(jsonObject);

} catch (Exception ex) {
ex.printStackTrace();
}
}

public static void getArray(Object object2) throws ParseException {

JSONArray jsonArr = (JSONArray) object2;

for (int k = 0; k < jsonArr.size(); k++) {

if (jsonArr.get(k) instanceof JSONObject) {
parseJson((JSONObject) jsonArr.get(k));
} else {
System.out.println(jsonArr.get(k));
}

}
}

public static void parseJson(JSONObject jsonObject) throws ParseException {

Set<Object> set = jsonObject.keySet();
Iterator<Object> iterator = set.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
if (jsonObject.get(obj) instanceof JSONArray) {
System.out.println(obj.toString());
getArray(jsonObject.get(obj));
} else {
if (jsonObject.get(obj) instanceof JSONObject) {
parseJson((JSONObject) jsonObject.get(obj));
} else {
System.out.println(obj.toString() + "\t"
+ jsonObject.get(obj));
}
}
}
}}
Ответ 3

Большое спасибо @Code в другом ответе. Благодаря вашему коду я могу прочитать любой файл JSON. Теперь я пытаюсь упорядочить все элементы по уровням, чтобы их можно было использовать!

Я работал с Android, считывая JSON из URL, и единственное, что мне пришлось изменить, это строки

Set<Object> set = jsonObject.keySet();
Iterator<Object> iterator = set.iterator();

для

Iterator<?> iterator = jsonObject.keys();

Я делюсь своей реализацией, чтобы кому-то помочь:

public void parseJson(JSONObject jsonObject) throws ParseException, JSONException {

Iterator<?> iterator = jsonObject.keys();
while (iterator.hasNext()) {
String obj = iterator.next().toString();

if (jsonObject.get(obj) instanceof JSONArray) {
//Toast.makeText(MainActivity.this, "Objeto: JSONArray", Toast.LENGTH_SHORT).show();
//System.out.println(obj.toString());
TextView txtView = new TextView(this);
txtView.setText(obj.toString());
layoutIzq.addView(txtView);
getArray(jsonObject.get(obj));
} else {
if (jsonObject.get(obj) instanceof JSONObject) {
//Toast.makeText(MainActivity.this, "Objeto: JSONObject", Toast.LENGTH_SHORT).show();
parseJson((JSONObject) jsonObject.get(obj));
} else {
//Toast.makeText(MainActivity.this, "Objeto: Value", Toast.LENGTH_SHORT).show();
//System.out.println(obj.toString() + "\t"+ jsonObject.get(obj));
TextView txtView = new TextView(this);
txtView.setText(obj.toString() + "\t"+ jsonObject.get(obj));
layoutIzq.addView(txtView);
}
}
}
}
Ответ 4

1.) Создайте arraylist соответствующего типа, в данном случае, т.е String

2.) Создайте JSONObject при передаче вашей строки в JSONObject конструктор в качестве входных данных


  • Поскольку JSONObject обозначение представлено фигурными скобками, т.е. {}

  • Где как JSONArray обозначение представлено квадратными скобками, т.е []

3.) Извлекаем JSONArray из JSONObject (созданного на 2-м шаге), используя "interests" в качестве индекса.

4.) Пройдите JASONArray с помощью циклов до длины массива, предоставленного length() функцией

5.) Извлеките свой JSONObjects from JSONArray с помощью getJSONObject(index) функции

6.) Извлеките данные из JSONObject, используя индекс '"interestKey"'.

Примечание : JSON при синтаксическом анализе используется escape-последовательность для специальных вложенных символов, если ответ json (обычно из других API-интерфейсов JSON response) содержит кавычки ("), подобные этому

`"{"key":"value"}"`

должно быть примерно так

`"{\"key\":\"value\"}"`

таким образом, вы можете использовать JSONParser для достижения формата экранированной последовательности в целях безопасности как

JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(inputString);

Код :

JSONParser parser = new JSONParser();
String response = "{interests : [{interestKey:Dogs}, {interestKey:Cats}]}";

JSONObject jsonObj = (JSONObject) parser.parse(response);

или

JSONObject jsonObj = new JSONObject("{interests : [{interestKey:Dogs}, {interestKey:Cats}]}");

List<String> interestList = new ArrayList<String>();

JSONArray jsonArray = jsonObj.getJSONArray("interests");

for(int i = 0 ; i < jsonArray.length() ; i++){
interestList.add(jsonArray.getJSONObject(i).optString("interestKey"));
}

Примечание : Иногда вы можете увидеть некоторые исключения, когда values are not available in appropriate type or is there is no mapping key поэтому в тех случаях, когда вы не уверены в наличии значения, поэтому используйте optString, optInt, optBoolean и т.д., которые просто вернут значение по умолчанию, если оно отсутствует, и даже попытаются преобразовать значение в int, если оно строкового типа, и наоборот, так просто Никаких исключений null или NumberFormat вообще в случае отсутствия ключа или значения

Из документов


Получаем необязательную строку, связанную с ключом. Возвращает значение по умолчанию, если такого ключа нет.


 public String optString(String key, String defaultValue) {

  String missingKeyValue = json_data.optString("status","N/A");
// note there is no such key as "status" in response
// will return "N/A" if no key found

или для получения пустой строки, т.е. "" если ключ не найден, просто используйте

  String missingKeyValue = json_data.optString("status");
// will return "" if no key found where "" is an empty string

Дополнительная ссылка на исследование

java json