gpt4 book ai didi

java - 如何反序列化这个动态值 JSON?

转载 作者:行者123 更新时间:2023-11-30 06:14:18 25 4
gpt4 key购买 nike

我想反序列化以下 JSON(原始版本中有大约 100 个带有动态值的 Exchange):

{
"Exchange1": {
"EUR": [
"CNY",
"USD"
],
"INR": [
"USD",
"CNY"
]
},
"Exchange2": {
"BRL": [
"EUR",
"USD",
"INR"
],
"JPY": [
"USD",
"EUR",
"CNY"
]
},
....
}

我正在使用http://www.jsonschema2pojo.org/但它正在生成一个采用文字值(“Exchange1”、“EUR”等)的 Java 类,而无论动态字符串值是什么,我都需要迭代它:

enter image description here

<小时/>

如何用 Java 描述这个 JSON?

最佳答案

这里不能有 POJO(在正常意义上),但人们倾向于使用 POJO 生成器,即使对于动态对象,它们也不进行提前分析。“动态”对象通常应使用 java.util.Map (有序实现)映射 + 可以使用 java.util.Set (有序实现)映射唯一值。因此,如果您有货币的自定义枚举,请说类似

enum Currency {

BRL,
CNY,
EUR,
INR,
JPY,
USD,

}

然后您可以轻松定义映射,而无需使用任何看起来根本不适用的 POJO:

private static final Type exchangesType = new TypeToken<Map<String, Map<Currency, Set<Currency>>>>() {
}.getType();
final Map<String, Map<Currency, Set<Currency>>> exchanges = gson.fromJson(jsonReader, exchangesType);
System.out.println(exchanges);

因此,简单的 toString() 输出将如下所示:

{Exchange1={EUR=[CNY, USD], INR=[USD, CNY]}, Exchange2={BRL=[EUR, USD, INR], JPY=[USD, EUR, CNY]}}

如果您不喜欢 Currency 枚举的想法(您必须始终通过重新编译等使其保持最新),那么您可以简单地将货币标记声明为 java.lang.String 并得到相同的结果:

private static final Type exchangesType = new TypeToken<Map<String, Map<String, Set<String>>>>() {
}.getType();
final Map<String, Map<String, Set<String>>> exchanges = gson.fromJson(jsonReader, exchangesType);
System.out.println(exchanges);

关于java - 如何反序列化这个动态值 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49570359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com