我正在尝试解析一些JSON。这是代码。 frc-manual.usfirst.org/a/GetAllItems/ManualID=3我已经尝试了几个小时才能使其正常工作,但是我在网上看到的每个示例都使用getJSONObject(int),但是我只能使用getJSONObject(String)。这使得不可能。我在俯视什么吗?

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import android.annotation.SuppressLint;

public class JSON {
   private String html = "html";
   private String version = "version";
   private String pageString = null;
   private String urlString = "http://frc-manual.usfirst.org/a/GetAllItems/ManualID=3";

   public volatile boolean parsingComplete = true;
   public JSON(String page){
      this.pageString = page;
   }
   public String getHTML(){
      return html;
   }
   public String getVersion(){
      return version;
   }

   @SuppressLint("NewApi")
   public void readAndParseJSON(String in) {
      try {
         JSONObject reader = new JSONObject(in);

         JSONObject head = reader.getJSONObject("data").getJSONObject("SubChapter").getJSONObject("3").getJSONObject("children").getJSONObject(pageString);
         if(head != null){
             html = head.getString("item_content_text");
             html = html + head.length();
             for(int i = 0; i < head.length();i++){
                 JSONObject children = head.getJSONObject(i);
                 if(children != null){
                     html = html + children.getString("item_content_text");
                 }

             }
         }

         //html = html + listFromJsonSorted(head.getJSONObject("children"));





         JSONObject main  = reader.getJSONObject("data");
         version = main.getString("LatestManualUpdate");

         parsingComplete = false;



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

   }
   public void fetchJSON(){
      Thread thread = new Thread(new Runnable(){
         @Override
         public void run() {
         try {
            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(10000 /* milliseconds */);
            conn.setConnectTimeout(15000 /* milliseconds */);
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            // Starts the query
            conn.connect();
         InputStream stream = conn.getInputStream();

      String data = convertStreamToString(stream);

      readAndParseJSON(data);
         stream.close();

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

       thread.start();
   }
   static String convertStreamToString(java.io.InputStream is) {
      java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
      return s.hasNext() ? s.next() : "";
   }

}

最佳答案

在此示例中可能看到的是一个JSONArray。

JSONArray arr = json.getJSONArray("array");
JSONObject obj = arr.getJSONObject(0);


就您而言,我在此JSON中看不到任何数组,您代码中的头是一个JSONObject。要获取item_content_text,您只需要head.getString("item_content_text");

您可以执行以下操作以在JSON中获取所有子级:

html = head.getString("item_content_text");
JSONObject children = head;
while (children.containsKey("children")) {
   children = children.getJSONObject("children");
   html += children.getString("item_content_text");
}

10-05 22:55