2015-01-21 72 views
1

我花了4个小时查看各种答案和其他资源,但是我根本无法将我的头围绕JSON解析。我需要一些帮助。使用GSON读取JSON数据

这里是JSON字符串:

{ 
    "success": true, 
    "categories": [ 
    { 
     "category_id": "20", 
     "parent_id": "0", 
     "name": "Desktops", 
     "image": "***", 
     "href": "***", 
     "categories": null 
    }, 
    { 
     "category_id": "25", 
     "parent_id": "0", 
     "name": "Components", 
     "image": "***", 
     "href": "***", 
     "categories": null 
    }, 
    { 
     "category_id": "34", 
     "parent_id": "0", 
     "name": "MP3 Players", 
     "image": "***", 
     "href": "***", 
     "categories": null 
    } 
    ] 
} 

这里是我的数据类:

public class Data 
{ 
    String success; 
    List<Category> categories; 

    // Various get/set functions and a toString override 

    public class Category 
    { 
     String category_id; 
     String name; 
     String image; 

     // Various get/set functions 
    } 
} 

这里就是我想要阅读:

private class GetJson extends AsyncTask<String, Void, String> 
    { 
     @Override 
     protected String doInBackground(String... params) 
     { 
      String results = "Fail"; 
      URL url = null; 
      try 
      { 
       url = new URL("***"); 
      } 

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

      URLConnection ucon = null; 

      try 
      { 
       ucon = url.openConnection(); 
       InputStream is = ucon.getInputStream(); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is)); 
       String line = ""; 
       String result = ""; 
       while((line = bufferedReader.readLine()) != null) 
       { 
        result += line; 
       } 

       Data data = new Gson().fromJson(result, Data.class); 

       result = data.toString(); 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 

      return results; 
     } 

     protected void onPostExecute(String result) 
     { 
      Toast.makeText(con, result, Toast.LENGTH_SHORT); 
     } 
    } 

我没有任何东西在堆栈跟踪上。我多次查了亚行。一切似乎都在工作,但我没有得到Toast或错误信息。

我在做什么错?

+0

所有的成功首先是类型的布尔 – 2015-01-21 12:22:26

+0

使用杰克逊(https://github.com/FasterXML/jackson) – Pierry 2015-01-21 12:22:42

+0

你忘了关闭输入流.. – smb 2015-01-21 12:28:32

回答

2

你忘了出示Toast

试试这个

Toast.makeText(con, result, Toast.LENGTH_SHORT).show(); 

,并进一步

Data data = new Gson().fromJson(result, Data.class); 

    result = data.toString(); 
    return result; // need return this 

否则总是会得到"Fail"

+0

谢谢。而且我不得不承认,这是我在Excel中发布的最愚蠢的错误。我有点困,我猜这是发生了什么大声笑。谢谢!标记。 – Asim 2015-01-21 12:44:36

+0

不客气。我自己经常犯这样的错误:-) – SorryForMyEnglish 2015-01-21 12:51:31

0
//First generate getter setter of data class variables. 

TypeToken<Data> tokenPoint1 = new TypeToken<Data>() {}; 

//SYSO result string here for Confirmation 

    Gson gson = new Gson(); 

Data dataobj= gson.fromJson(result, tokenPoint1.getType()); 

// syso dataobj.getname(); 

//希望这会为你工作