作者:marco112977 | 来源:互联网 | 2023-05-22 19:23
我正在尝试Object
从其字段重建一个(我将字段作为JSONObject),如下所示:
JSONObject jObj = new JSONObject();
JSONObject jObj1 = new JSONObject();
JSONObject jObj2 = new JSONObject();
JSONObject jObj21 = new JSONObject();
JSONObject jObj22 = new JSONObject();
jObj1.put("jObj11", "value11");
jObj1.put("jObj12", "value12");
jObj21.put("jObj211", "value211"); // level 2
jObj21.put("jObj212", "value212");
jObj21.put("jObj213", "value213");
jObj22.put("jObj221", "value221");
jObj22.put("jObj222", "value222");
jObj22.put("jObj223", "value223");
jObj2.put("jObj21", jObj21); // level 1
jObj2.put("jObj22", jObj22);
jObj.put("jObj1", jObj1); // level 0
jObj.put("jObj2", jObj2);
我使用这些线来获取Json Obeject
GsonBuilder builder = new GsonBuilder();
Gson gSon = builder.create();
gSon.toJSon(jObj);
该问题是,当我分析主要的Object
(jObj)与GSON,我发现一个名为额外的键"nameValuePairs"
.那么为什么我拿到这把钥匙呢?
通知:
如果我这样做:jObj.toString();
在日志上,此键消失.
如果我这样做:jObj.opt("nameValuePairs");
我的结果是Null(就像没有名为"nameValuePairs"的键).
这是我的实际结果:
这就是我期望的:
我找到了类似于我的问题的东西,但它没有帮助.
是否有人有解决方案/解决方法或可以解释这个密钥的来源?
谢谢.
1> 小智..:
尝试使用Gson JsonObject
而不是JSONObject
这样:
JsonObject jObj = new JsonObject();
JsonObject jObj1 = new JsonObject();
JsonObject jObj2 = new JsonObject();
JsonObject jObj21 = new JsonObject();
JsonObject jObj22 = new JsonObject();
jObj1.addProperty("jObj11", "value11");
jObj1.addProperty("jObj12", "value12");
jObj21.addProperty("jObj211", "value211"); // level 2
jObj21.addProperty("jObj212", "value212");
jObj21.addProperty("jObj213", "value213");
jObj22.addProperty("jObj221", "value221");
jObj22.addProperty("jObj222", "value222");
jObj22.addProperty("jObj223", "value223");
jObj2.add("jObj21", jObj21); // level 1
jObj2.add("jObj22", jObj22);
jObj.add("jObj1", jObj1); // level 0
jObj.add("jObj2", jObj2);
String json = new Gson().toJson(jObj);
是的......它适用于`JsonObject`,非常感谢!
2> atok..:
GSON是POJO序列化的工具.如果您自己构建JSONObject,则无需gSon.toJSon(jObj);
调用jObj.toString()
即可获得结果.
正确的GSON用法是为您的数据结构创建POJO对象.
您的根对象看起来像这样:
public class jObj {
JObj11 jObj11;
JObj12 jObj12;
}
在以这种方式定义整个结构之后,您可以使用gSon.toJSon(jObj);
它将其序列化为JSON而无需使用JSONObject.GSON将遍历它并生成JSON字符串.
在您的示例中,GSON尝试序列化JSONObject Java对象的内部结构,而不是它所代表的JSON结构.如您所见,JSONObject使用nameValuePair来存储它的内容.
3> Krzysztof Ci..:
当我只想将Gson用于漂亮的打印时,我遇到了同样的问题。JsonObject可以正常工作,但是如果您仍然想使用JSONObject而不是JsonObject,则可以通过以下方式使用它:
public class JsonUtil {
public static String toPrettyFormat(String jsonString)
{
JsonParser parser = new JsonParser();
JsonObject json = parser.parse(jsonString).getAsJsonObject();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String prettyJson = gson.toJson(json);
return prettyJson;
}
}
并简单地将JSONObject作为字符串传递,如下所示:
String prettyJson = JsonUtil.toPrettyFormat(jsonObject.toString());