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,您需要两个步骤。
定义此类:
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 + "]"; } }
修改您的“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 ):
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/