Как правильно разобрать эту строку JSON с помощью GSON.JsonObject возвращается пустым без ошибок разбора - PullRequest
0 голосов
/ 25 мая 2011

У меня есть структура данных следующим образом

{"testString": "некоторая строка", "success": true, "причина": ноль, "данные": {"networks": [{"networkId ":" 1 "," networkName ":" некоторая область "," networkType ": 1}, {" networkId ":" 4 "," networkName ":" другое место "," networkType ": 1}]}}

Таким образом, в основном это объект массива с первыми парами ключ / значение: 1) Строка 2) Bool 3) Строка, а четвертый - JSONObject

Объект, который я использую какконтейнер для всех этих данных:

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;
}
}

Я анализирую его следующим образом: объект esponse представляет собой строку json

  Gson gson = new GsonBuilder().serializeNulls().create();
  responseObject = gson.fromJson(response,ContainerData.class);

Я могу получить значения для всего, кроме JSONObject, который всегда возвращаетпустой массив вроде {} Есть мысли о том, где я все испортил?

Ответы [ 2 ]

2 голосов
/ 31 мая 2011

Я проанализировал строку 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());

                }
2 голосов
/ 31 мая 2011

Вот подход, который работает с предоставленным вами вводом 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);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...