【问题标题】:JSONArray parse with gson使用 gson 解析 JSONArray
【发布时间】:2016-01-07 12:01:59
【问题描述】:

当我尝试通过 gson 检索 jsonobject 时它正在工作,但是当我使用 gson 检索 jsonArray 时它不起作用。如何从下面的 jsonArray 中检索数据并通过 GSON 显示到列表视图?

谁能帮帮我?

我的 jsonArray

[
 {
    "node_title": "One Day camp",
    "nid": "202605",
    "Icon Image": {
        "fid": "146",
        "uid": "1",
        "filename": "10483937_741467599279220_8365483080196647009_n.jpg",
        "uri": "public://10483937_741467599279220_8365483080196647009_n.jpg",
        "filemime": "image/jpeg",
    }
 },
 { 
    "node_title": "University of Kerala",
    "nid": "202604",
    "Icon Image": {
        "fid": "145",
        "uid": "1",
        "filename": "careerguru.png",
        "uri": "public://careerguru.png",
        "filemime": "image/png",
    }
 }
]

【问题讨论】:

标签: java android gson


【解决方案1】:

我认为问题出在"filemime": "xxx"之后的,

【讨论】:

    【解决方案2】:

    编辑:我想我误解了你的问题。 venkatKA的回答是正确的。

    通常,您会构建一个与您期望接收的 json 具有相同特征的对象。例如,

    public class MyJsonObject {
    
        private String node_title;
        private String nid;
    
        private static class IconImage {
    
            private String fid;
            private String uid;
            private String filename;
            private String uri;
            private String filemime;
    
        }
    
    }
    

    然后,您将遍历该 JSONArray,使用 Gson 将它们序列化为 MyJsonObject 的数组。

    (至于内部类,我知道 Gson 可以序列化内部类,但我不能 100% 确定将内部类声明为“图标图像”的语法)

    我的观点是,使用 Gson 轻松/方便地将 Json 响应序列化为对象。但是,如果您只是想从响应中获取数据,请使用 JSONObject 类。

    【讨论】:

      【解决方案3】:

      假设您要存储数据的 POJO 类已经创建,即:您的 json 数组中的单个 json 对象。

      假设这个类是 Node.java 并且包含一个 Node 对象。

      您可以通过 Gson 使用以下代码从 json 中获取 Node 对象的列表。

      Gson gson = new Gson();
      Type listType = new TypeToken<List<Node>>(){}.getType();
      List<Node> posts = (List<Node>) gson.fromJson(jsonOutput, listType);
      

      现在,您可以使用 List 并将其用于显示列表中的数据。

      是的,根据venkatKA 的回答,json 也是错误的,因为它有一个额外的“,”

      希望对你有帮助...

      【讨论】:

        【解决方案4】:
        1.Remove , after the  "filemime": "image/jpeg", json error.
        
        2.Parse Json to Gson
        
        public class Array {
        @SerializedName("node_title")
        @Expose
        private String nodeTitle;
        @SerializedName("nid")
        @Expose
        private String nid;
        @SerializedName("Icon Image")
        @Expose
        private com.example.IconImage IconImage;
        public String getNodeTitle() {
        return nodeTitle;
        }
        
        public String getNid() {
         return nid;
        }
        }
        
        
        public class IconImage {
        
        @SerializedName("fid")
        @Expose
        private String fid;
        @SerializedName("uid")
        @Expose
        private String uid;
        @SerializedName("filename")
        @Expose
        private String filename;
        @SerializedName("uri")
        @Expose
        private String uri;
        @SerializedName("filemime")
        @Expose
        private String filemime;
        
        public String getFid() {
        return fid;
        }
        
        public String getUid() {
        return uid;
        }
        
        public String getFilename() {
        return filename;
        }
        
        public String getUri() {
        return uri;
        }
        public String getFilemime() {
        return filemime;
        }
        
        I hope it helps you.
        

        【讨论】:

          【解决方案5】:

          这里有一个很好的例子:Gson and deserializing an array of objects with arrays in it

          所以你会想要像这样解析你的 Json 字符串:

          public class IconImage {
              int fid;
              int uid;
              String filename;
              String uri;
              String filemime;
          }
          
          public class Node {
              String node_title;
              int nid;
              @SerializedName("Icon Image") IconImage icon_image;
          }
          
          Gson gson = new Gson();
          Node[] myNodes = gson.fromJson(yourJsonString, Node[].class);
          

          【讨论】:

            【解决方案6】:

            你可以有这样的课程:

            class NodeList{
                  List<Node> allnode;
            }
            

            其他类将是带有特定数组项的节点。

            【讨论】:

            • @down voter:请在投反对票时发表评论,以便改进或删除答案。谢谢:)
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-04-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-01-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多