有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Gson-Android的java动态Json解析

我有一个json,如下所述

{
  "product": [
    {
      "classification": "abc",
      "ABC": [
        {
          "classification": "abc",
          "name": "abc new product one",
          "price": "10775.0000",
        },
        {
          "classification": "abc",
          "name": "abc new product two",
          "price": "12725.0000",
        }
      ]
    },
    {
      "classification": "def",
      "DEF": [
        {
          "classification": "def",
          "name": "def product one",
          "price": "728.0000",
        },
        {
          "classification": "def",
          "name": "def product two",
          "price": "1263.0000",
        },
      ]
    }
  ],
  "status": "OK",
  "message": "success"
}

在上面的json中,大写字母的键是动态的

(Ex: ABC, DEF)

。我创建了pojo类,如下所示:

    public class ProductResponse{

       private String status;
       private String message;
       private List<Products>;

       Getters And Setters
    }

    public class Products{

       private String classification;

    }

我正在努力写产品pojo类的下一部分,因为关键是大写字母

(Ex: ABC, DEF)

它们是动态的。我使用volley库获取数据,并使用gson库进行解析。请帮帮我


共 (2) 个答案

  1. # 1 楼答案

    您不能有动态名称。原因是json中的名称需要链接到对象中的属性。 我建议您在json和模型中添加一个“classification”属性,如下所示:

    {
      "type": "def",
      " results": [
        {
          "name": "def product one",
          "price": "728.0000",
        },
        {
          "name": "def product two",
          "price": "1263.0000",
        },
      ]
    }
    
    
    
    public final class ProductResponse{
    
           private String status;
           private String message;
           private List<Products> product = new Arraylist<>();
    
           // Getters And Setters
        }
    
        public final class Products{
    
           private String type; // type of product // ABC or DEF
           private List<Result> results = new Arraylist<>(); 
    
          // Getters And Setters
        }
    
    
         public final class Result{
    
           private String name;
           private String price;
    
    
         // Getters And Setters
        }
    

    您的products类现在有一个与分类关联的结果列表

    希望有帮助

  2. # 2 楼答案

    你的问题是动态键,我发现它不是动态的。如我所见,对于product数组中的每个元素,classification键的值是下一个键。唯一的区别是它们是大写的

    {
      "classification": "def",
      "DEF": [
        {
          "classification": "def",
          "name": "def product one",
          "price": "728.0000",
        },
        {
          "classification": "def",
          "name": "def product two",
          "price": "1263.0000",
        },
      ]
    }
    

    如中所示,这里是"classification": "def",下一个键是DEF。这里我要做的是获取classification键的值,将字符串中的所有字母大写,然后将其用作key