2017-06-12 59 views
0

我遇到麻烦GSON:的Java GSON检查数据

比如我有一个从网站输出:

[["connected"], ["user1":"Hello"], ["user2":"Hey"], ["disconnected"]]

但我想解析此JSON和输出是这样的:

connected 
user1 says: Hello 
user2 says: Hey 
disconnected 

我quicly写了这个代码:

public static void PrintEvents(String id){ 
    String response = Post.getResponse(Server()+"events?id="+id,""); 
    // response is [["connected"],["user1":"Hello"],["user2":"Hey"],["disconnected"]] 

    JsonElement parse = (new JsonParser()).parse(response); //found this in internet 

    int bound = ????????????; // Should be 4 

    for (int i=1;i<=bound;i++){ 
     String data = ???????????; 
     if (data == "connected" || data == "disconnected") then { 
      System.out.println(data); 
     }else if(?????==2){// to check how many strings there is, if it's ["abc","def"] or ["abc"] 
      String data2 = ??????????????; 
      System.out.println(data+" says: "+data2); 
     }else{ 
      //something else 
     } 
    }; 

} 

我应该使用问号插入到这些部件以使代码有效吗?

我找不到任何方式,使其工作...

对不起,我的英语不好。

编辑:改变了对[["connected"], ["user1","Hello"], ["user2","Hey"], ["disconnected"]]的回应。早期的回应是无效的JSON。

回答

0
  1. 您已经粘贴的响应不是有效的json。将其粘贴到http://www.jsoneditoronline.org/并查看错误。

请找到下面的代码片断:

公共静态无效printEvents(字符串ID) { 字符串响应= “[[\” 连接\ “],[\” USER1:你好\“] ,[\ “用户2:喂\”],[\ “断开\”]]“;

JsonElement parse = (new JsonParser()).parse(response); //found this in internet 


    int bound = ((JsonArray)parse).size(); // Should be 4 

    for (int i = 0; i < bound; i++) { 
     String data = ((JsonArray)parse).get(0).getAsString(); 
     if (data.equals("connected") || data.equals("disconnected")) { 
      System.out.println(data); 
      continue; 
     } 
     String[] splittedData = data.split(":"); 
     if (splittedData.length 
       == 2) {// to check how many strings there is, if it's ["abc","def"] or ["abc"] 
      System.out.println(splittedData[0] + " says: " + splittedData[1]); 
     } 
     /* 
     *else{ 
     * your else logic goes here 
     * } 
     * */ 
    } 

} 

夫妇的建议:

  1. 如果你是新的JSON的世界,用杰克逊,而不是GSON。
  2. 响应不是一个好设计。略正确JSON:

{ “firstKey”: “连接”, “userResponses”:[ { “用户1”: “哎” }, { “用户2”: “喜” } ], “的lastKey”: “断开” }

  • 另外尝试定义的,而不是使用JSON直列工作的POJO。
  • +0

    您的回应'[[“连接了”[[“connected”],[“user1”:“Hello”],[“user2”:“Hey”],[“ “],[”user1:Hello“],[”user2:Hey“],[”disconnected“]] 您的代码有效,但是当我更改正确的响应时,它不起作用。 'com.google.gson.stream.MalformedJsonException:在第1行的未终止数组第26列路径$ [1] [1]' –

    +0

    您所说的响应甚至不是有效的json。在数组中的json中,不能像<“user1”:“Hello”>那样输入内容。如果你想在同一个结构中,你应该改变你的响应格式。上面给出了一种可能的格式。您可以查找的另一种格式: [[“connected”],[{“user1”:“Hello”}],[{“user2”:“Hey”}],[“disconnected”]] –

    +0

    我懂了加工。非常感谢,我将它改为'[[“connected”],[“user1”,“Hello”],[“user2”,“Hey”],[“disconnected”]]'使其成为有效的json。 –

    0

    您需要定义一个单独的类是这样的:

    class MyClass{ 
    String name; 
    String value; 
    } 
    

    然后:

    List<MyClass> myclasses = new Gson().fromJson(response, new TypeToken<List<MyClass>>(){}.getType()); 
    

    然后

    for(MyClass myclass: myclasses){ 
    ... 
    }