Проблемы в разборе JSON от ASMX - PullRequest
0 голосов
/ 02 февраля 2012

Я пытаюсь проанализировать строку json, которую я получаю от своего веб-сервиса asmx через IIS. Строка, которую я получаю, как показано ниже:

"{\"Name\":\"Waqas Aslam\",\"Company\":\"ABC Systems AB\",\"Address\":\"myStreet 4\",\"Phone\":\"123456\",\"Country\":\"Sweden\"}"

Проблема в том, что я могу успешно получить строку ответа, но не могу ее проанализировать. Вот мой код:

try{
        InputStream source = getJson(URL);
        String s = streamToString(source);

        Log.i(TAG, s);


        GsonBuilder gsonb = new GsonBuilder();
        Gson gson = gsonb.create();

        JSONObject j = new JSONObject(s);
        Employee em = gson.fromJson(j.toString(), Employee.class);
        lblResult.setText(em.Company);          
}
catch (Exception e) {
    Log.e(TAG, e.toString());
    }

вот метод streamToString:

public static String streamToString(InputStream is) {
   //as per 64K size
       BufferedReader reader = new BufferedReader(new InputStreamReader(is), 65728);
       StringBuilder sb = new StringBuilder();

       String line = null;
       try {
           while ((line = reader.readLine()) != null) {
               sb.append(line);
           }
       }
       catch (IOException e) { e.printStackTrace(); }
       finally {
           try { is.close(); }
           catch (Exception e) { e.printStackTrace(); }
       }

       return sb.toString();
   }

а вот классный работник:

import com.google.gson.annotations.SerializedName;

    public class Employee {

            @SerializedName("Name")
            public String Name;

            @SerializedName("Company")
            public String Company;

            @SerializedName("Address")
            public String Address;

            @SerializedName("Phone")
            public String Phone;

            @SerializedName("Country")
            public String Country;
    }

Вот исключение, которое я получаю:

02-02 10:08:28.877: E/TestJSON(3223): org.json.JSONException: Value {"Name":"Waqas Aslam","Company":"ABC Systems AB","Address":"myStreet 4","Phone":"123456","Country":"Sweden"} of type java.lang.String cannot be converted to JSONObject

Если я вручную (по коду) предоставляю строку JSON для JSONObject, то он работает нормально, но не со строкой, которую я получаю от сервера. Что-то мне нужно изменить на стороне сервера? Если хотите, вы можете попробовать извлечь json с моего тестового сервера, используя HttpPost с этого URL http://test1.phoniro.se/AndroidTestWebService/Service.asmx/TestJSON2

1 Ответ

0 голосов
/ 02 февраля 2012

Дело в том, что имеющаяся у вас строка JSON недопустима. Удалите всех escape-символов (т.е. \") и попробуйте изменить его следующим образом:

{
    "Name": "WaqasAslam",
    "Company": "ABCSystemsAB",
    "Address": "myStreet4",
    "Phone": "123456",
    "Country": "Sweden"
}

Чтобы ответить на ваш вопрос, измените серверную часть произвести действительный JSON.Мой пример, приведенный выше, является совершенно корректным JSON, и у вас не должно возникнуть проблем с его анализом Gson. Вот веб-сайт, который можно использовать для проверки выходных данных JSON, когда вы не уверены.

...