当我从字符串构建一个json对象时,会附加一个根键“nameValuePairs”。
String curStr = "{\"e\": \"{}\", \"f\": \"{}\", \"g\": \"{}\"}";
JSONObject oldObj = new JSONObject(curStr);
结果
{"nameValuePairs":{"b":"{}","c":"{}","a":"{}"}}
为什么?
有什么方法可以阻止这种情况吗?
顺便说一下,我使用字符串json来表示我将在稍后使用的实际json。
答案 0 :(得分:1)
首先你的json在语法上是正确的,但我想你希望将对象表示为值,在你的情况下,大括号被评估为简单的字符串:
String curStr = "{\"e\": \"{}\", \"f\": \"{}\", \"g\": \"{}\"}";
JSONObject oldObj = new JSONObject(curStr);
使用像这样的json将生成值作为对象:
String curStr = "{\"e\": {}, \"f\": {}, \"g\": {}}";
JSONObject oldObj = new JSONObject(curStr);
无论如何,我试图创建那个JSONObject然后打印它的toString,它只会打印json,没有任何附件名称。
正如你在评论中发现问题是由Gson给出的,它会将JSONObject评估为地图。我尝试了一个小例子,我有“地图”作为字段。可能我已经尝试了不同版本的Gson。
Gson gson = new Gson();
String jsonStr = gson.toJson(oldObj);
结果:{"map":{"f":"{}","g":"{}","e":"{}"}}
如果要创建自定义对象并使用Gson反序列化json,请创建具有这些属性的类并使用fromJson(String json,Class clazz)方法
public class Test {
private String e;
private String f;
private String g;
}
和
Gson gson = new Gson();
Test myTestObj = gson.fromJson(curStr, Test.class);
希望这会对你有所帮助。 :)
答案 1 :(得分:0)
您可以尝试使用jsonStringer。
如下代码:
JSONStringer jObject = new JSONStringer()
.object()
.key("UserName").value(userNameValue)
.key("Name").value(nameValue)
.key("EmailId").value(emailIdValue)
.key("CountryId").value(contryIdValue)
.key("CountryName").value("") // It should be blank As Spanish Name is not set if User have App in Spanish
.key("State").value(stateValue)
.key("City").value(cityValue)
.key("ImageByteArray").value(imageBytes)
.endObject();
<强>更新强>
我刚在我的应用程序中使用您的代码并进行检查。
它向我展示了我们已经形成的结果。 我得到的结果是:
{
"f": "{}",
"g": "{}",
"e": "{}"
}
请检查您要导入的包裹。 为了您的参考,我将在类下面导入以表示json对象。
import org.json.JSONException;
import org.json.JSONObject;
只需导入上面的类并查看结果。
如果您还有任何疑问,请与我们联系。