【问题标题】:Dynamic Json Parsing Using Gson Android使用 Gson Android 进行动态 Json 解析
【发布时间】:2016-05-09 11:40:43
【问题描述】:

我有一个如下所述的 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中,大写的key是动态的

(例如:ABC、DEF)

。我创建了 pojo 类如下:

    public class ProductResponse{

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

       Getters And Setters
    }

    public class Products{

       private String classification;

    }

我正在努力编写 Products pojo 类的下一部分,作为大写字母的键

(例如:ABC、DEF)

是动态的。我正在使用 volley 库来获取数据和解析我正在使用 gson 库。请帮帮我。

【问题讨论】:

  • api 标准差。请根据您的要求编辑您的 web api .....!!!
  • 使用 JSONObject 检索 ABC 的列表内容可能是一种解决方法。至少,即使是动态的,您也有一个来自后端的密钥。然后你可以将json字符串解析为ArrayList
  • 对于这种情况,不要直接将json映射到对象,当然可以有其他解决方案。到目前为止,您可以通过索引使用循环迭代和读取 json 来获取动态的 ABC、DEF。
  • 我无法理解您的问题,请简单解释一下

标签: java android json android-volley gson


【解决方案1】:

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

{
  "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
    }

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

希望对你有帮助!

【讨论】:

  • 如果您在我的json中观察,有两种类型的产品。一个是“ABC”,另一个是“DEF”。我将其大写只是为了突出显示目的。
  • 嗨,我更新了 sn-p。需要定义类型。请参见上文。
  • @user2511004 你对我的回答满意吗?如果是,请点赞我的回答!谢谢:)
  • 我对您的回答很满意。这就是我接受您的回答的原因,但我没有 15 名声望来支持您的回答,抱歉。非常感谢您的回答
【解决方案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

【讨论】:

  • 我将其大写只是为了突出显示。其实是小写的。你能告诉我如何得到你所说的 pojo 类中的“分类”值。
  • 可以在构造函数中设置值。在创建 pojo 类的对象时解析值并传递它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 2011-08-13
  • 2018-04-13
相关资源
最近更新 更多