gpt4 book ai didi

java - 如何使用 Gson 获取 JSON 元素类型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:43:37 24 4
gpt4 key购买 nike

在 JSON 文件中,文件中的每个对象都由不同类型的 JSON 元素组成。 (整数、字符串、数组、对象数组等)

我的目标是列出所有元素名称和对应的类型。我可以知道如何在 Gson 中做到这一点吗?这样做的目的是创建 Hive 架构。

例子:

{
"number": 1,
"ts": "1386848002",
"cmpg": [
{
"id": 476,
"mcp": 0,
"deals": [ ],
"cookie": "uid:123",
"bid": [
{
"bId": 0,
"status": "ZB",
"rmtchID": -1
}
]
}
]
}

输出:

number int,
ts String,
cmpg array<map<String, Object>> // not sure how to interpret this...

最佳答案

我编写了这个简单的类,向您展示了如何使用一些 Gson 类来获得您需要的东西。

package stackoverflow.questions.q19124387;

import java.util.Map;

import com.google.gson.*;

public class Q20624042 {

private static String printClass(JsonElement je, String ident) {
StringBuilder sb = null;
if (je.isJsonNull())
return "null";

if (je.isJsonPrimitive()) {
if (je.getAsJsonPrimitive().isBoolean())
return "Boolean";
if (je.getAsJsonPrimitive().isString())
return "String";
if (je.getAsJsonPrimitive().isNumber()){
return "Number";
}
}

if (je.isJsonArray()) {
sb = new StringBuilder("array<");
for (JsonElement e : je.getAsJsonArray()) {
sb.append(printClass(e, ident+ " "));
}
sb.append(">");
return sb.toString();
}

if (je.isJsonObject()) {
sb = new StringBuilder("map<\n");
for (Map.Entry<String, JsonElement> e : je.getAsJsonObject().entrySet()) {
sb.append(ident);
sb.append(e.getKey()).append(":");
sb.append(printClass(e.getValue(), ident+" "));
sb.append("\n");
}
sb.append(ident);
sb.append(">");
return sb.toString();
}
return "";

}

public static void main(String[] args) {
String json = "{" + "\"number\":1," + "\"ts\":\"1386848002\"," + "\"cmpg\":[{\"id\":476,\"mcp\":0.0000,\"deals\":[],\"cookie\":\"uid:123\",\"bid\":[{\"bId\":0,\"status\":\"ZB\",\"rmtchID\":-1}]}]}";

JsonElement je = new JsonParser().parse(json);
System.out.println(printClass(je," "));

}

}

这是您的 JSON 字符串的结果:

map<
number:Number
ts:String
cmpg:array<map<
id:Number
mcp:Number
deals:array<>
cookie:String
bid:array<map<
bId:Number
status:String
rmtchID:Number
>>
>>
>

JSON 具有递归的特性,因此解决此类问题的唯一方法是编写递归方法。我的缩进系统很天真,我缩进只是为了显示与您的 JSON 的对应关系,也许您甚至不需要它。请记住 in JSON你没有整数和 double 之间的区别,

JSON can represent four primitive types (strings, numbers, booleans, and null) and two structured types (objects and arrays)

所以如果你有什么区别,你可以稍微改变我的方法。

.

关于java - 如何使用 Gson 获取 JSON 元素类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20624042/

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