【问题标题】:parsing JSON using GSON issue使用 GSON 问题解析 JSON
【发布时间】:2014-08-12 20:35:48
【问题描述】:

解析 JSON 中的嵌套键值对时出现问题。

JSON 结构。

 {  
   "data":{  
      "action":"item1",
      "react":"item2",
        "categories":{  
         "Price":{  
            "$0-$10":{  
               "Refine":"false",
               "bcc":"2"               
            },
            "$251-$500":{  
               "Refine":"false",
               "bcc":"2"
            }
         },
         "Gender":{  
            "Girl":{  
              "Refine":"false",
               "bcc":"2"
            },
            "Boy":{  
            "Refine":"false",
               "bcc":"2"
            }
         }
    }
}}

定义如下类为POJO

class Product
{
public Data data;

public class Data{

   public String action;

   public String react;

   public Map<String,Map<String,request>> categories;

}}

public class request{
  public string Refine;
  public String bcc
}

JSON 元素“类别”中的键值对是动态的。

Product responseData = gson.fromJson(jsoninput,
                Product.class);

尝试使用 gson 和 pogo 类 Product 解析上述 JSON

  1. 字段动作、反应被正确解析。
  2. 字段类别返回空地图。

【问题讨论】:

  • "上面的代码返回空MyMap",上面的代码是什么?您可以重命名 json MyMap 和您的类 MyMap 以避免混淆。您能否再次重申您的问题,并详细说明您想要什么。
  • 感谢您的回复,我已经定义了一个 POGO 类来匹配 JSON 结构和类成员以进行反序列化。
  • 我解决了你的问题,要发布还是你已经解决了?
  • 我还在努力。如果您能发布解决方案,那就太好了。非常感谢!

标签: android json gson


【解决方案1】:

我正在使用 GSON 2.3 版,从 maven 下载它。 只需创建一个项目,将它们全部复制并设置 json 文件路径并按 RUN:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;


public class main {
    public static void main(String[] args) {


        Gson gson = new Gson();


        try {

            BufferedReader br = new BufferedReader(
                    new FileReader("your json file path"));

            // Deserialization
            Product obj = gson.fromJson(br, Product.class);


            // Serialization
            gson = new GsonBuilder().setPrettyPrinting().create();
            String json = gson.toJson(obj);
            System.out.println(json);


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

    }
}

你的 POJO 类:

import java.util.Map;


class Product
{
    public Data data;

    public class Data{

        public String action;

        public String react;

        public class request{
            public String Refine;
            public String bcc;
        }

        public Map<String,Map<String,request>> categories;

    }
}

最后是你的 json 字符串:

   {
       "data":{  
         "action":"item1",
         "react":"item2",
         "categories":{  
            "Price":{  
               "$0-$10":{  
                  "Refine":"false",
                  "bcc":"2"               
               },
               "$251-$500":{  
                  "Refine":"false",
                  "bcc":"2"
               }
            },
            "Gender":{  
               "Girl":{  
                 "Refine":"false",
                  "bcc":"2"
               },
               "Boy":{  
               "Refine":"false",
                  "bcc":"2"
               }
            }
        }

       }
     }

【讨论】:

  • 试图了解您的解决方案.. 看起来与我之前发布(尝试)的完全一样。
  • 测试解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
相关资源
最近更新 更多