如何 consume/deserialize .Net WCF 服务 JSON 在 Java 中响应

How to consume/deserialize .Net WCF service JSON response in Java

我在 consuming/deserializing WCF .NET JSON 响应 Java 时遇到问题。 JSON 响应格式如下。

{"d":"[
{\"ID\":123,\"Company\":\"Microsoft\",\"Country\":\"USA\",
\"website\":\"http:\/\/www.microsoft.com\",
\"FirstName\":\"john\",\"Email\":\"abc@gmail.com\"},

{\"ID\":124,\"Company\":\"Google\",\"Country\":\"USA\",
\"website\":\"http:\/\/www.google.com\",
\"FirstName\":\"john\",\"Email\":\"abc@gmail.com\"},

{\"ID\":125,\"Company\":\"Apple\",\"Country\":\"USA\",
\"website\":\"http:\/\/www.abc.com\",
\"FirstName\":\"john\",\"Email\":\"abc@gmail.com\"}
]"}

虽然在 Java 代码端,我在反序列化此 json 响应以获取我的对象及其相应属性时遇到问题。

这是我目前用来反序列化 json 响应的 java 代码。

String companyTitle = "";
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(jsonResponseString);
if (element.isJsonObject()) {
JsonArray companies = element.getAsJsonArray();
JsonObject company = companies.get(0).getAsJsonObject();
companyTitle = company .get("Company").getAsString();     
}

JSON响应格式有问题吗?感谢任何形式的帮助,提前致谢。

我不确定您为什么会收到该回复 - 它无效 json。它有两个问题

  1. 外方括号不应包含在引号中。
  2. 需要删除引号转义字符(不确定这是否只是您输入的?)

如果您不发布实际错误(提示:尽管堆栈溢出很强大,但我们还没有开发出读心术的能力),很难知道实际问题是什么。

汤姆是对的。有效的 JSON 应该是这样的:

{"d":[
    {"ID":123,"Company":"Microsoft","Country":"USA",
    "website":"http://www.microsoft.com",
    "FirstName":"john","Email":"abc@gmail.com"},

    {"ID":124,"Company":"Google","Country":"USA",
    "website":"http://www.google.com",
    "FirstName":"john","Email":"abc@gmail.com"},

    {"ID":125,"Company":"Apple","Country":"USA",
    "website":"http://www.aabc.com",
    "FirstName":"john","Email":"abc@gmail.com"}
]}

你的代码是这样的:

String companyTitle = "";
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(jsonResponseString);
JsonObject object = element.getAsJsonObject();
if (object.isJsonObject()) {
    JsonArray companies = object.getAsJsonArray("d");
    JsonObject company = companies.get(0).getAsJsonObject();
    companyTitle = company .get("Company").getAsString();     
}