我想将 Java 中的 JSON 解析为 Android,但 Gson 和 Jackson 都无法正常工作
I want to parse JSON in Java for Android but neither Gson nor Jackson works correctly
我有一个 C# 网络服务,它 returns 带有 JSON 字符串的 soap 看起来像
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<getAndroidVersionResponse xmlns="http://development.com/">
<getAndroidVersionResult>{"Valid":false,"Url":"http://localhost/test","Av":[{"Valid":true,"Url":"Som!@#$%^&*()_+{}:<>?\"''\\"\\"eURL","Av":null},{"Valid":false,"Url":"SomeURLSeond","Av":null}]}</getAndroidVersionResult>
</getAndroidVersionResponse>
</s:Body>
</s:Envelope>
对象使用Newtonsoft.Json.JsonConvert.SerializeObject(obj);
序列化
对于正常的非怪异字符串,Gson 和 Jackson 工作得很好,但是当我组合怪异字符时,它们都无法反序列化。
当我用Json Parser Online and JSONLint在线验证字符串时,没有问题。
{"Valid":false,"Url":"http://localhost/test","Av":[{"Valid":true,"Url":"Som!@#$%^&*()_+{}:<>?\"''\\"\\"eURL","Av":null},{"Valid":false,"Url":"SomeURLSeond","Av":null}]}
Json 在线解析器
JSONLint
我为他们使用的代码:
/*GSON*/
com.google.gson.Gson gson = new com.google.gson.Gson();
AndroidVersion v = gson.fromJson(subList.item(0).getNodeValue(), AndroidVersion.class);
/*Jackson*/
com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.PASCAL_CASE_TO_CAMEL_CASE);
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
AndroidVersion v = mapper.readValue(subList.item(0).getNodeValue(), AndroidVersion.class);
我可以采取任何其他方法吗?我遇到过 Boon-JSON,但看起来不太乐观。
我想现在 Newtonsoft
会为 Java 重做 Newtonsoft.JSON 因为那个库太棒了!
编写您的模型,例如:
public class AndroidVersion {
public boolean Valid;
public String Url;
public List <AndroidVersion> Av;
}
然后像下面这样使用 Gson:
String jsonString = "Your json string here";
AndroidVersion v = gson.fromJson(jsonString, AndroidVersion.class);
我有一个 C# 网络服务,它 returns 带有 JSON 字符串的 soap 看起来像
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<getAndroidVersionResponse xmlns="http://development.com/">
<getAndroidVersionResult>{"Valid":false,"Url":"http://localhost/test","Av":[{"Valid":true,"Url":"Som!@#$%^&*()_+{}:<>?\"''\\"\\"eURL","Av":null},{"Valid":false,"Url":"SomeURLSeond","Av":null}]}</getAndroidVersionResult>
</getAndroidVersionResponse>
</s:Body>
</s:Envelope>
对象使用Newtonsoft.Json.JsonConvert.SerializeObject(obj);
对于正常的非怪异字符串,Gson 和 Jackson 工作得很好,但是当我组合怪异字符时,它们都无法反序列化。
当我用Json Parser Online and JSONLint在线验证字符串时,没有问题。
{"Valid":false,"Url":"http://localhost/test","Av":[{"Valid":true,"Url":"Som!@#$%^&*()_+{}:<>?\"''\\"\\"eURL","Av":null},{"Valid":false,"Url":"SomeURLSeond","Av":null}]}
Json 在线解析器
JSONLint
我为他们使用的代码:
/*GSON*/
com.google.gson.Gson gson = new com.google.gson.Gson();
AndroidVersion v = gson.fromJson(subList.item(0).getNodeValue(), AndroidVersion.class);
/*Jackson*/
com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.PASCAL_CASE_TO_CAMEL_CASE);
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
AndroidVersion v = mapper.readValue(subList.item(0).getNodeValue(), AndroidVersion.class);
我可以采取任何其他方法吗?我遇到过 Boon-JSON,但看起来不太乐观。
我想现在 Newtonsoft
会为 Java 重做 Newtonsoft.JSON 因为那个库太棒了!
编写您的模型,例如:
public class AndroidVersion {
public boolean Valid;
public String Url;
public List <AndroidVersion> Av;
}
然后像下面这样使用 Gson:
String jsonString = "Your json string here";
AndroidVersion v = gson.fromJson(jsonString, AndroidVersion.class);