2014-02-18 8 views
5

У меня есть двумерный массив JSON объект, как показано нижеКак разобрать многомерный массив JSON в Java

{"enrollment_response":{"condition":"Good","extra":"Nothig","userid":"526398"}} 

Я хотел бы разобрать выше Json объекта массива, чтобы получить состояние, дополнительные, userid.So я есть используется ниже код

JSONParser parser = new JSONParser(); 

    try { 

     Object obj = parser.parse(new FileReader("D:\\document(2).json")); 

     JSONObject jsonObject = (JSONObject) obj; 

     String name = (String) jsonObject.get("enrollment_response"); 
     System.out.println("Condition:" + name); 

     String name1 = (String) jsonObject.get("extra"); 
     System.out.println("extra: " + name1); 



    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

Его метания ошибку в

"Exception in thread "main" java.lang.ClassCastException: 
org.json.simple.JSONObject cannot be cast to java.lang.String at 
com.jsonparser.apps.JsonParsing1.main(JsonParsing1.java:22)" 

Пожалуйста, кто-нибудь помочь в этом вопросе ,

+0

Какой json lib вы используете? –

+2

Я думаю, что сообщение об ошибке довольно ясно. В каком результате вы надеетесь получить, добавив ** объект ** в строку ** ** (вы понимаете, что значение 'enrollment_response' является объектом?)? –

+1

У вас здесь нет массива. Это объект Json с другим объектом Json. – Henry

ответ

3

Прежде всего: Не используйте парсинга библиотеку JSON, который вы используете. Это ужасно. Нет, действительно, ужасный. Это старая, жестокая вещь, которая легко обертывает Java-тип Hashmap. Он не может обрабатывать массив JSON как корневую структуру.

Используйте Jackson, Gson, или даже старые json.org library.

Это говорит, чтобы исправить свой текущий код:

JSONObject enrollmentResponseObject = 
    (JSONObject) jsonObject.get("enrollment_response"); 

Это получает внутренний объект. Теперь вы можете извлечь внутренние поля:

String condition = (String) enrollmentResponseObject.get("condition"); 

И так далее. Вся библиотека просто расширяет Hashmap (без использования дженериков) и заставляет вас разобраться и применить к соответствующим типам.

+0

Привет, Брайан, спасибо. – saminathan

2

Ниже линии,

String name = (String) jsonObject.get("enrollment_response"); 

должен быть

String name = jsonObject.getJSONObject("enrollment_response").getString("condition"); 

Значение enrollment_response снова является Json.

+0

Я получаю сообщение об ошибке как «Метод getJSONObject (String) не определен для типа JSONObject« – saminathan

+0

Можете ли вы предоставить полное имя класса для 'JSONObject'. Я предположил, что вы используете библиотеку [org.json] (http://www.json.org/javadoc/org/json/JSONObject.html#get%28java.lang.String%29). –

+1

@ShashankKadne Это org.json.simple, и это ужасно. –

0

Это работает, но поверьте мне: измените библиотеку.

JSONObject jsonObject = (JSONObject) obj; 

JSONObject name = (JSONObject) jsonObject.get("enrollment_response"); 
System.out.println("Condition:" + name); 

String name1 = (String) name.get("extra"); 
System.out.println("extra: " + name1); 
+0

Привет, я получил ошибку как «Метод getJSONObject (String) не определен для типа JSONObject« – saminathan

+0

Как и другие ответчики, мы думали, что вы используете библиотеку org.json. Можете ли вы предоставить точную библиотеку, которую используете? – Enrichman

+0

@ Enrichman Это просто org.json.simple, и это ужасно. –

Смежные вопросы