无法使用JSON解析子项

时间:2014-12-09 06:24:56

标签: java android json stringbuilder arrays

我在解析格式化json时遇到了一些麻烦,我想知道是否有人可以在这个例子中展示如何正确解析数据:

来源:

  try {
            HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
            InputStream is = conn.getInputStream();
            BufferedReader r = new BufferedReader(new InputStreamReader(is));
            StringBuilder sb = new StringBuilder();
            for(String line = r.readLine(); line != null; line = r.readLine()){
                sb.append(line);
            }
            JSONArray jsonArray = new JSONArray(sb.toString());
            for(int i = 0; i < jsonArray.length(); i++){
                JSONObject obj = jsonArray.getJSONObject(i);
                String sha = obj.getString("sha");
                String name = obj.getString("name");
                String message = obj.getString("message");
                Log.d("sha", sha);
                Log.d("name", name);
                Log.d("message", message);

            }
        } 

ERROR:

&#34;名称没有价值&#34;

JSON DATA:

http://pastebin.com/0FJUGm3L

2 个答案:

答案 0 :(得分:1)

如果您将JSON加载到此JSON Viewer工具中,您将认识到您具有以下JSON结构:

enter image description here

现在,既然你想获得sha, commit message, and commiter name,你就需要深入了解json的对象结构。

  1. 首先,您需要循环整个json数组:

    for(int i = 0; i < jsonArray.length(); i++){
        JSONObject currentObj = jsonArray.getJSONObject(i);
    
  2. 在循环内部,您需要找到“sha”的位置。再看看结构,你会发现它正好位于物体下面。所以你只需要使用getString()

    String sha = currentObj.getString("sha");
    
  3. 要获取提交message,因为它位于commit对象下,您需要先阅读该对象,然后才能阅读message

    JSONObject objCommit = currentObj.getJSONObject("commit");
    String commitMessage = objCommit.getString("message");
    
  4. 最后一部分是获得作者的name。再次注意name存储在author对象下。所以,你需要先阅读。由于author对象存储在commit对象下,因此您可以通过objCommit读取提交对象来获取作者:

    JSONObject objAuthor = objCommit.getJSONObject("author");
    String authorName = objAuthor.getString("name");
    
  5. 其余由您决定:)

  6. 无私插件:此外,如果您在阅读或遍历JSON时遇到困难,那么SO问题可以派上用场:JSON Parsing Error

答案 1 :(得分:0)

所有键名称,消息,...都在author JSONObject中。从author对象获取所有值为:

 for(int i = 0; i < jsonArray.length(); i++){
                JSONObject obj = jsonArray.getJSONObject(i);
                String sha = obj.getString("sha");
                // get commit  object
                JSONObject objcommit = obj.getJSONObject("commit"); 
                // get author  object
                JSONObject objauthor = objcommit.getJSONObject("author");
                String name = objauthor.getString("name");
                String message = objauthor.getString("message");
                Log.d("sha", sha);
                Log.d("name", name);
                Log.d("message", message);

            }