如何正确解析使用GSON的这个json字符串。 JsonObject返回空,没有解析错误
我有一个数据结构如下如何正确解析使用GSON的这个json字符串。 JsonObject返回空,没有解析错误
{“testString”:“一些字符串”,“成功”:真,“原因”:空,“数据”:{“网络“:[{”networkId“:”1“,”networkName“:”some area“,”networkType“:1},{”networkId“:”4“,”networkName“:”another place“,”networkType“ 1}]}}
因此,基本上它是与第一你键/值对是一个1)字符串2)布尔3)字符串和第四阵列对象被一个JSONObject
的Object我使用作为所有这些数据的容器是
public class ContainerData {
private boolean success;
private String reason;
private JSONObject data;
private String testString;
public String getTestString(){
return this.testString;
}
public void setTestString(String test){
this.testString = test;
}
public boolean getSuccess() {
return this.success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getReason() {
return this.reason;
}
public void setReason(String reason) {
this.reason = reason;
}
public JSONObject getData() {
return this.data;
}
public void setData(JSONObject data) {
this.data = data;
}
}
我解析它像这样withr esponse对象是JSON字符串
Gson gson = new GsonBuilder().serializeNulls().create();
responseObject = gson.fromJson(response,ContainerData.class);
我能值以外的所有的JSONObject它总是返回在那里我搞乱了一个空数组如{}任何想法?
下面是一个与您提供的JSON输入一起工作的方法,但更“完全”反序列化成友好的数据结构。
输出是
[ContainerData: success=true, reason=null, testString=some string, data=[Data: networks=[ [Network: networkId=1, networkName=some area, networkType=1], [Network: networkId=4, networkName=another place, networkType=1] ]]]
public class Foo
{
static String jsonInput =
"{" +
"\"testString\":\"some string\"," +
"\"success\":true," +
"\"reason\":null," +
"\"data\":" +
"{" +
"\"networks\":" +
"[" +
"{\"networkId\":\"1\",\"networkName\":\"some area\",\"networkType\":1}," +
"{\"networkId\":\"4\",\"networkName\":\"another place\",\"networkType\":1}" +
"]" +
"}" +
"}";
public static void main(String[] args)
{
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
ContainerData container = gson.fromJson(jsonInput, ContainerData.class);
System.out.println(container);
}
}
class ContainerData
{
private boolean success;
private String reason;
private String testString;
private Data data;
@Override
public String toString()
{
return String.format(
"[ContainerData: success=%1$b, reason=%2$s, testString=%3$s, data=%4$s]",
success, reason, testString, data);
}
}
class Data
{
private Network[] networks;
@Override
public String toString()
{
return String.format(
"[Data: networks=%1$s]",
Arrays.toString(networks));
}
}
class Network
{
private String networkId;
private String networkName;
private int networkType;
@Override
public String toString()
{
return String.format(
"[Network: networkId=%1$s, networkName=%2$s, networkType=%3$d]",
networkId, networkName, networkType);
}
}
谢谢,我使用了类似的解决方案 – Brian 2011-06-01 06:19:17
我已经解析了你上面提到的JSON字符串。它没有使用GSON来解析JSON。请尝试这一点。我认为它会解决您的问题:
String jsonString = "{\"testString\":\"some string\",\"success\":true,\"reason\":null,\"data\":{\"networks\":[{\"networkId\":\"1\",\"networkName\":\"some area\",\"networkType\":1},{\"networkId\":\"4\",\"networkName\":\"another place\",\"networkType\":1}]}}";
JSONObject jObject = new JSONObject(jsonString);
String menuObject = jObject.getString("testString");
System.out.println("testString="+menuObject);
String menuObject1 = jObject.getString("success");
System.out.println("success="+menuObject1);
String menuObject2 = jObject.getString("reason");
System.out.println("reason="+menuObject2);
String menuObject3 = jObject.getString("data");
System.out.println("data="+menuObject3);
JSONObject popupObject = jObject.getJSONObject("data");
JSONArray jObject1 = popupObject.getJSONArray("networks");
for (int i = 0; i < 2; i++) {
System.out.println("networkId of"+" "+i+" th element= "+jObject1.getJSONObject(i).getString("networkId").toString());
System.out.println("networkName of"+" "+i+" th element= "+jObject1.getJSONObject(i).getString("networkName").toString());
System.out.println("networkType of"+" "+i+" th element= "+jObject1.getJSONObject(i).getString("networkType").toString());
}
谢谢,这两个答案给了我如何实施解决方案的想法。 – Brian 2011-06-01 06:19:48
为什么使用JSONObject而不是反序列化为友好的结构?为什么使用JSONObject而不是com.google.gson.JsonObject? – 2011-05-31 11:01:43