java - 如何使用 gson 反序列化未知命名数组 json

标签 java json gson

json 看起来像这样:

"hour_totals": {
      "382423": {
        "imp": 126,
        "clk": 1,
        "spend": "$0.03",
        "conv": 0,
        "cpm": "$0.22",
        "cpc": "$0.03",
        "ctr": "0.79%",
        "cpa": "$Inf"
      },
      "382424": {
        "imp": 209,
        "clk": 1,
        "spend": "$0.05",
        "conv": 0,
        "cpm": "$0.23",
        "cpc": "$0.05",
        "ctr": "0.48%",
        "cpa": "$Inf"
      }}

我阅读了 20 多个答案,但无法找到如何反序列化这样的结构,请帮助了解该类的外观,因为时间不是固定字符串。

最佳答案

要使用 Gson 解析此 JSON,您需要两个步骤。

  1. 定义此类:

    public class Total {
    
       Map<String, HourData> hour_totals;
    
       @Override
       public String toString() {
          return "Total [hour_totals=" + hour_totals + "]";
       }
    
    }
    

    其中 HourData

    public class HourData {
    
       Integer imp;
       Integer clk;
       String spend;
       Integer conv;
       String cpm;
       String cpc;
       String cpa;
    
       @Override
       public String toString() {
          return "HourData [imp=" + imp + ", clk=" + clk + ", spend=" + spend
                + ", conv=" + conv + ", cpm=" + cpm + ", cpc=" + cpc + ", cpa="
                + cpa + "]";
       }
    
     }
    
  2. 修改您的“Json 字符串”,因为它不是有效的 Json(请参阅下面的更多详细信息)。您只需要像下面的代码一样添加大括号:

    public class Q19201300 {
    
      public static void main(String[] args) {
          String json = "\"hour_totals\": {  "
                  + "  \"382423\": {                 "
                  + "  \"imp\": 126,                 "
                  + "  \"clk\": 1,                   "
                  + "  \"spend\": \"$0.03\",         "
                  + "  \"conv\": 0,                  "
                  + "  \"cpm\": \"$0.22\",           "
                  + "  \"cpc\": \"$0.03\",           "
                  + "  \"ctr\": \"0.79%\",           "
                  + "  \"cpa\": \"$Inf\"             "
                  + "},                              "
                  + "\"382424\": {                   "
                  + "  \"imp\": 209,                 "
                  + "  \"clk\": 1,                   "
                  + "  \"spend\": \"$0.05\",         "
                  + "  \"conv\": 0,                  "
                  + "  \"cpm\": \"$0.23\",           "
                  + "  \"cpc\": \"$0.05\",           "
                  + "  \"ctr\": \"0.48%\",           "
                  + "  \"cpa\": \"$Inf\"             "
                  + "}}                              ";
    
          Total t = new Gson().fromJson("{" + json + "}", Total.class);
    
          System.out.println(t);
    
      }
    }
    

这会给你:

Total [hour_totals={382423=HourData [imp=126, clk=1, spend=$0.03, conv=0, cpm=$0.22, cpc=$0.03, cpa=$Inf], 382424=HourData [imp=209, clk=1, spend=$0.05, conv=0, cpm=$0.23, cpc=$0.05, cpa=$Inf]}]

关于你的字符串。来自 JSON 官方语法( http://www.ietf.org/rfc/rfc4627.txt ):

  1. JSON Grammar

    A JSON text is a sequence of tokens. The set of tokens includes six structural characters, strings, numbers, and three literal names.

    A JSON text is a serialized object or array.

关于java - 如何使用 gson 反序列化未知命名数组 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19201300/

相关文章:

java - 如何将列名称添加到结果集中。我将 Java 与 EntityManager 一起使用

javascript - 将 JSON 结果绑定(bind)到下拉列表

java - 如何正确创建json文件

java - 将 JAR 上传到数据库

java - ComplexityObject ksoap2 Android Magento 错误

python - 带有嵌套列表的 JSON 到 pandas 数据框

java - Struts2 JSON Writer 发送 JSON 响应时出现异常

java - 为什么 GSON 使用字段而不是 getter/setter?

java - Spark中通过SWIFT从对象存储获取数据需要什么配置

c# - 带有列表的 asp.net 核心 ioptions