【问题标题】:Can someone help me in writing Json?有人可以帮我写Json吗?
【发布时间】:2013-03-29 08:13:18
【问题描述】:

我只是从服务器解析 Json 格式的数据。我被卡住了。我不知道如何进一步进行。

JSONObject object1 = new JSONObject(str);
String s1 = object1.getString("results");
JSONArray array1 = object1.getJSONArray("constituencies");

上面的代码对吗?

【问题讨论】:

    标签: android json getjson android-parser


    【解决方案1】:

    看看下面的 JSON 解析代码,

    public class ParseJSON extends Activity {
    
    /** Called when the activity is first created. */
    
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        String readTwitterFeed = readTwitterFeed();
        try {
          JSONArray jsonArray = new JSONArray(readTwitterFeed);
          Log.i(ParseJSON.class.getName(),
              "Number of entries " + jsonArray.length());
          for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            Log.i(ParseJSON.class.getName(), jsonObject.getString("text"));
          }
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    
      public String readTwitterFeed() {
        StringBuilder builder = new StringBuilder();
        HttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet("http://twitter.com/statuses/user_timeline/vogella.json");
        try {
          HttpResponse response = client.execute(httpGet);
          StatusLine statusLine = response.getStatusLine();
          int statusCode = statusLine.getStatusCode();
          if (statusCode == 200) {
            HttpEntity entity = response.getEntity();
            InputStream content = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(content));
            String line;
            while ((line = reader.readLine()) != null) {
              builder.append(line);
            }
          } else {
            Log.e(ParseJSON.class.toString(), "Failed to download file");
          }
        } catch (ClientProtocolException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }
        return builder.toString();
      }
    } 
    

    编写 JSON 非常简单。只需创建 JSONObject 或 JSONArray 并使用 toString() 方法。

    public void writeJSON() {
      JSONObject object = new JSONObject();
      try {
        object.put("name", "Jack Hack");
        object.put("score", new Integer(200));
        object.put("current", new Double(152.32));
        object.put("nickname", "Hacker");
      } catch (JSONException e) {
        e.printStackTrace();
      }
      System.out.println(object);
    }
    

    Original Source.

    【讨论】:

      【解决方案2】:

      以上代码对还是错??

      所以看源码:

      {
         "results":{
            "constituencies":[
      
            ],
            "members":[
               {
                  "constituency_name":"Beckenham",
                  "member_name":"Bob Stewart",
                  "member_party":"Conservative",
                  "member_biography_url":"http://www.parliament.uk/biographies/commons/Bob-Stewart/3919",
                  "member_website":"http://www.bobstewartmp.com/",
                  "uri":"http://findyourmp.parliament.uk/constituencies/beckenham.json"
               },
               {
                  "constituency_name":"Colchester",
                  "member_name":"Sir Bob Russell",
                  "member_party":"Liberal Democrat",
                  "member_biography_url":"http://www.parliament.uk/biographies/commons/Sir-Bob-Russell/35",
                  "member_website":"http://www.bobrussell.org.uk",
                  "uri":"http://findyourmp.parliament.uk/constituencies/colchester.json"
               },
            ]
         }
      }
      

      这里有两个JSONObject

      • 第一(全源)
      • 结果

      结果包含(在此代码的 sn-p 中)两个 JSONArrays:

      • 选区(即空数组)
      • 成员(有两个孩子)

      因此,您需要先获取整个 JSON,然后获取结果,然后才能访问数组。

      JSONObject root = new JSONObject(str); // whole source
      JSONObject results = root.getJSONObject("results");
      
      JSONArray constituenciesArr = results.getJSONArray("constituencies");
      JSONArray membersArr = results.getJSONArray("members");
      JSONObject child = null;
      for (int i = 0; i < membersArr.length(); i++) {
         child = membersArr.getJSONObject(i);
         String mName = child.getString("member_name");
         ...
      
      }
      

      【讨论】:

      • 我根据你的建议继续编写代码。它显示The value of the local variable constituenciesArr is not usedThe value of the local variable membersArr is not used。检查这个pastebin.com/cMzZHzBW和议会课pastebin.com/j2BVjDFk
      • @User1001 这不是问题...只是警告您没有使用 constituenciesArr 变量。您可以确定删除此行。这只是为了想象。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 2022-06-14
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 2021-05-30
      相关资源
      最近更新 更多