2016-08-26 6 views
-2

Я пытаюсь прочитать файл JSON, в котором у меня есть целая серия данных, но когда чтение говорит мне, что оно не может преобразовать из JSONObject в JSONArrayorg.json.simple.JSONArray не может быть передан в org.json.simple.JSONObject

Часть структуры JSON файла является:

{ 
    "data": [ 
     [1, 1, 1, 1, 1, 1, 1, 1], 
     [1, 1, 0, 0, 0, 0, 1, 1], 
     [1, 1, 0, 0, 0, 0, 1, 1], 
     [0, 1, 1, 0, 0, 1, 1, 0], 
     [0, 1, 1, 1, 1, 1, 1, 0], 
     [0, 0, 1, 1, 1, 1, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0] 
    ], 
    "time": 0.2 
}, 

Код:

public static void main(String[] args) throws InterruptedException { 

JSONParser parser = new JSONParser(); 


try { 

    Object obj = parser.parse(new FileReader("C:\\Carriots\\dos.json")); 

    JSONObject jsonObject = (JSONObject) obj; 


    // loop array 
    JSONArray tag = (JSONArray) jsonObject.get("data"); 


    Iterator iterator = tag.iterator(); 

    while (iterator.hasNext()) { 
    System.out.println(iterator.next()); 

} 
+2

С вашего кода программа компилируется и работает. Я использовал JSON просто. У вас есть точная трассировка стека? –

ответ

0

Try ...

JSONArray tag = jsonObject.getJSONArray("data");

0

Попробуйте использовать ниже, чтобы получить JSONArray из ключевых data

JSONArray tag = (JSONArray) jsonObject.getJSONArray("data"); 

jsonObject.get() вернет вам Object не любой JSONArray.

0
import java.io.FileReader; 

import org.json.simple.JSONObject; 
import org.json.simple.JSONArray; 
import org.json.simple.parser.JSONParser; 

public class JSONTest { 

    public static void main(String[] args){ 


     try { 

      JSONParser parser = new JSONParser(); 

      Object obj = parser.parse(new FileReader("C:\\Carriots\\dos.json")); 

      JSONObject jsonObject = (JSONObject) obj; 

      JSONArray data = (JSONArray)jsonObject.get("data"); 

      for(Object o: data){ 
       System.out.println(o); 
      } 

     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 


} 

выход:

[1,1,1,1,1,1,1,1] 
[1,1,0,0,0,0,1,1] 
[1,1,0,0,0,0,1,1] 
[0,1,1,0,0,1,1,0] 
[0,1,1,1,1,1,1,0] 
[0,0,1,1,1,1,0,0] 
[0,0,0,0,0,0,0,0] 
[0,0,0,0,0,0,0,0] 
+0

Ошибка сохраняется, я сменил библиотеки org.json.simple ... на org.json и консоль показывает мне ту же ошибку. – Bufank85

+0

@ Bufank85 Вы ​​не можете использовать 'org.json' так, как вы это делаете, чтобы передать объект в массив, который вы использовали _, чтобы использовать библиотеку 'org.json.simple'. Который я не вижу никаких проблем с вами. – px06

+0

Я скопировал весь ваш код, и вывод продолжает показывать тот же java.lang.ClassCastException: org.json.simple.JSONArray не может быть передан в org.json.simple.JSONObject \t на JSONTest.main (JSONTest.java:20) – Bufank85

0

Вы можете использовать итератор для обработки массива данных. Обязательно используйте Object, а не String или Integer, так как вы получите ошибки, конвертирующие JSONObject в одно из этих значений.

package jsonProcessing; 

import java.io.FileReader; 
import java.util.Iterator; 

import org.json.simple.JSONArray; 
import org.json.simple.JSONObject; 
import org.json.simple.parser.JSONParser; 

public class JsonNumReader { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    JSONParser parser = new JSONParser(); 

    try { 
     JSONObject jsonObject = (JSONObject) parser.parse(new FileReader("C:/JSON/numbers.json")); 

     JSONArray array = (JSONArray)jsonObject.get("data"); 

     Iterator<Object>iterator = array.iterator(); 
     while(iterator.hasNext()){ 
      System.out.println(iterator.next()); 
     } 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 
} 

Выход:

[1,1,1,1,1,1,1,1] 
[1,1,0,0,0,0,1,1] 
[1,1,0,0,0,0,1,1] 
[0,1,1,0,0,1,1,0] 
[0,1,1,1,1,1,1,0] 
[0,0,1,1,1,1,0,0] 
[0,0,0,0,0,0,0,0] 
[0,0,0,0,0,0,0,0] 
Смежные вопросы