gpt4 book ai didi

java - 如何以预定义格式表示 JSON 字符串中的键值?

转载 作者:行者123 更新时间:2023-12-01 12:10:07 25 4
gpt4 key购买 nike

我有一个像这样的 JSON 字符串,其中有键和值,如下所示 -

{
"u":{
"string":"1235"
},
"p":"2047935",
"client_id":{
"string":"5"
},
"origin":null,
"item_condition":null,
"country_id":{
"int":3
},
"timestamp":{
"long":1417823759555
},
"impression_id":{
"string":"2345HH*"
},
"is_consumerid":true,
"is_pid":false
}

举个例子,一个键是“u”,它的值是-

{
"string":"1235"
}

类似地,另一个键是“country_id”,其值为-

{
"int":3
}

对于其他人来说也是如此。现在我需要做的是,我需要表示上面的键值,如下所示。如果任何值是字符串数据类型,则用双引号表示,否则不用双引号表示

"u": "1235"
"p": "2047935"
"client_id": "5"
"origin":null
"item_condition":null
"country_id": 3 // I don't have double quotes here around 3 since country_id was int that's why
"timestamp": 1417823759555
"impression_id": "2345HH*"
"is_consumerid": true
"is_pid": false

然后我需要制作另一个 json 字符串,它应该如下所示 -

{
"u": "1235",
"p": "2047935",
"client_id": "5",
"origin":null,
"item_condition":null,
"country_id": 3,
"timestamp": 1417823759555,
"impression_id": "2345HH*",
"is_consumerid": true,
"is_pid": false
}

最好、最有效的方法是什么?

更新:-

这就是我所拥有的 -

    JsonObject jsonObject = new JsonParser().parse(response).getAsJsonObject();

for (Map.Entry<String, JsonElement> object : jsonObject.entrySet()) {
if (object.getValue() instanceof JsonObject) {
String data = object.getValue().toString();
Map<String, Object> jsonIn = gson.fromJson(data, type);
Map<String, Object> jsonOut = new HashMap<String, Object>();

Set<String> keys = jsonIn.keySet();
for (String key : keys) {
Object value = jsonIn.get(key);
if (value instanceof Map) {
Map<?, ?> mapValue = (Map<?, ?>) value;
for (Map.Entry<?, ?> entry : mapValue.entrySet()) {
jsonOut.put(key, entry.getValue());
}
} else {
jsonOut.put(key, value);
}
}

// System.out.println(jsonOut);
Type typeOfMap = new TypeToken<Map<String, String>>() {
}.getType();
String json = gson.toJson(jsonOut, typeOfMap);
System.out.println(json);

}
}

唯一不起作用的是 - 当我尝试将 jsonOut 映射序列化为 JSON 时,特定键的所有值都会转换为字符串。但我需要的是,只有那些值应该转换为字符串(双引号),它们通常像 country_id 值不应该用双引号,因为根据我的原始 JSON,它是一个整数.

最佳答案

伪代码:

Map<Object> jsonIn = JsonParser.parseJsonToMap(theJson);
Map<Object> jsonOut = new HashMap<Object>();
String[] keys = jsonIn.getKeys();
for (String key in keys) {
Object value = jsonIn.get(key);
if (value instanceof Map) {
Map mapValue = (Map) value;
Object[] valueValues = mapValue.getValues();
assert valueValues.length == 1;
jsonOut.add(key, valueValues[0]);
}
else {
jsonOut.add(key, value);
}
}

这段代码有点作弊,因为它依赖于这样一个事实:人们不需要操作数据类型,因为它们已经是正确的。人们可以添加更多逻辑来检查内部映射的键值以确定数据类型,但我认为没有意义,除非需要某种数据类型转换。

一些 JSON 工具包有自己的类,例如 JSONObject,它们使用它们来代替 Map,但它们基本上只是 Map 的子类,并且逻辑是相同的(尽管 instanceof 是替换为查询值的类型,(Map) 转换将替换为特定的 getObject 方法调用或类似方法。

关于java - 如何以预定义格式表示 JSON 字符串中的键值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27327234/

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