当前位置: 首页 > 知识库问答 >
问题:

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

山高峰
2023-03-14

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多个答案,但找不到如何反序列化这样一个结构,请帮助我了解这个课程是什么样的,因为小时不是一个固定的字符串。

共有1个答案

颜思淼
2023-03-14

>

  • 定义这些类:

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

    由于“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);
    
      }
    }
    

    这将给你:

    >

  • JSON语法

    JSON文本是一系列标记。标记集包括六个结构字符、字符串、数字和三个文字名称。

  •  类似资料:
    • 假设我有一组a、B、C类: 公开A类:整数; 公共B类:整数;字符串地址; 公共类C:int orderNumber; 如何反序列化仅包含这些类但顺序未知的Json字符串(在Java中使用Gson)?例如: 非常感谢你!

    • 问题内容: 我在反序列化以下json数组时遇到麻烦(对不起,大小): 如果将其粘贴到json-viewer中,则会得到以下结构: 现在,包含具有坐标的数组的数组具有可变大小。所以我想在Java中,整个对象应该是一个数组,其中包含数组的集合,每个数组都包含一个。就像是 但是gson不接受这一点。我收到以下错误消息: 这似乎很奇怪,因为对我来说好像不像一个数组。但这可能使我感到困惑,或多或少地迷路了…

    • 当我试图使用Gson库反序列化JSON对象数组时,我遇到了一个问题。 JSON数组的一个示例: 你怎么认为?反序列化这种JSON响应的正确Java代码是什么?

    • 问题内容: 我在尝试使用Gson库反序列化对象的JSON数组时遇到问题。 JSON数组的示例: 你怎么看?反序列化此类JSON响应的正确Java代码是什么? 问题答案: 要反序列化JSONArray,您需要使用TypeToken。您可以从GSON用户指南中了解更多信息。示例代码: 如果您有JSONArray,则可以使用

    • 问题内容: 我正在尝试反序列化来自API的JSON响应。JSON如下所示(MAC地址和位置已更改): 问题在于措施措施。由于对象的名称正在更改,因此我不知道如何将其正确反序列化为C#对象。我在这里发现使用字典的解决方案存在类似问题,但是如果以这种方式尝试,我只会得到空目录。 这是我的反序列化方法: 这是APIResponse类: 有什么方法可以轻松地适当地反序列化这些措施吗? 问题答案: 看来您应

    • 我像这样接收JSON 当然,我实现了包含所有字段和类的类Track、Album和Playlist 顺便说一句,我不能改变JSON。所以我需要一个代码来解析它。