2015-08-24 2 views
1

У меня возникли проблемы в доступе к JSONArray («страницы») при чтении файла JSON в Java с помощью JSON-простой-1.1.1.jarКак получить доступ к JSONArray в JSONObject с помощью Java?

Мой файл JSON составляет около 32 Мб размер и формат как показано ниже:

{ 
    "id": "0912898213", 
    "pages": [ 
     { 
      "pageUrl": "http://www.example0.com", 
      "results": [ 
       { 
        "number": "1" 
       }, 
       { 
        "number": "2" 
       } 
      ] 
     }, 
     { 
      "pageUrl": "http://www.example1.com", 
      "results": [ 
       { 
        "number": "3" 
       }, 
       { 
        "number": "4" 
       } 
      ] 
     } 
    ] 
} 

Принимая во внимание, код Java, чтобы открыть файл в формате JSON, как показано ниже:

JSONParser parser=new JSONParser(); 
JSONObject pagesObject = (JSONObject) parser.parse(new  FileReader(PATH_JSON_DataExtractor));   
JSONArray jsonArray= (JSONArray) pagesObject.get("pages"); 

for(int i=0; i<jsonArray.size(); i++){} 

ПРОБЛЕМА: jsonArray равна нулю все время. Хотя формат json правильный, и он должен работать так, как ожидалось! Вышеупомянутый код Java работает с данным образцом json (также выше), но код Java не работает с 32-мегабайтным json-файлом. Расположение файла json также верное, и формат также верен, но все же я получаю эту проблему доступа!

Где я ошибаюсь, чтобы получить доступ к json-файлу? Я просматривал похожие вопросы, и я выполнил точные инструкции по доступу к json-файлу. Но я просто потерял право на это, поэтому, ища предложения, чтобы этот код работал. Спасибо вам большое за ваше время!

+1

Meaby, создающий класс, который представляет объект JSON, упрощает его для вас. parse имеет метод, который получает строку и класс представленного объекта. Вы уверены, что он открывает файл? Meaby проблема заключается в анализе содержимого, а не в открытии файла. – aSoler

+0

Нет, он даже не читает элемент «id», он возвращает мне нуль для этого! – Amir

+0

Хорошо. Почему бы не попытаться прочитать файл и сохранить его в строке, обычным способом, а затем разобрать? – aSoler

ответ

2

С ниже кода она работает идеально подходит для меня. Вы можете проверить, правильно ли указано расположение файла? Также попробуйте чтение идентификатора, как pagesObject.get("id")

package json.simple; 

import java.io.FileReader; 

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

public class ReadJSON { 
    public static void main(String[] args) throws Exception { 
     JSONParser parser = new JSONParser(); 
     JSONObject pagesObject = (JSONObject) parser.parse(new FileReader("/home/user/tmp/test.json")); 
     System.out.println(pagesObject.get("id")); 
     System.out.println(pagesObject.get("pages").getClass().getName()); 
     JSONArray jsonArray= (JSONArray) pagesObject.get("pages"); 

     for(int i=0; i<jsonArray.size(); i++){ 
      System.out.println(jsonArray.get(i)); 
     } 
    } 
} 

А вот содержание моего test.json. Точно так же, как ваш

{ 
    "id": "0912898213", 
    "pages": [ 
     { 
      "pageUrl": "http://www.example0.com", 
      "results": [ 
       { 
        "number": "1" 
       }, 
       { 
        "number": "2" 
       } 
      ] 
     }, 
     { 
      "pageUrl": "http://www.example1.com", 
      "results": [ 
       { 
        "number": "3" 
       }, 
       { 
        "number": "4" 
       } 
      ] 
     } 
    ] 
} 

А вот моя зависимость в мавена

<dependency> 
    <groupId>com.googlecode.json-simple</groupId> 
    <artifactId>json-simple</artifactId> 
    <version>1.1.1</version> 
</dependency> 
+0

Спасибо за ответ. Да, я уже проверил это, и он работает с этим тестовым файлом, но с 32 МБ-файлом он не работает. Я считаю, что это из-за размера файла! Как мне с этим справиться? – Amir

+0

И мой проект - простой Java-проект, а не проект Maven! – Amir

+1

Я только что попробовал с файлом 36 Мбайт, и он работал с тем же выше примерным кодом. Есть ли проблема с размером кучи java? – sag

0

Используйте это: -

JSONArray jsonArray= (JSONArray) pagesObject.getJSONArray("pages");

+0

Да, я уже пробовал это, я получаю эту ошибку «Метод getJSONArray (String) не определен для типа JSONObject« – Amir

+0

@NaveenG просто предоставление строки кода в этом виде не помогает с пониманием проблемы. Лучше объяснить, что не так в вопросе. – thecoshman

1

Наконец его работы, но я до сих пор не знаю реальную причину проблемы. Я разбил файл на два отдельных json-файла и выполнил код для обоих из них, и он сработал. Теперь мне просто нужно объединить их и сделать! Нехорошее решение, но не могло найти другого пути!

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