Приложение для Android анализирует данные json

Привет, у меня есть этот код, я хочу проанализировать эти данные для объекта, теперь я получаю строку любого типа

Я хочу получить объект описания, объект широты и объект долготы отдельно

@SuppressLint("NewApi") 
public class MainActivity extends Activity {
private static final String SOAP_ACTION = "http://tempuri.org/xxxx/xxxx";
private static final String METHOD_NAME = "xxxxxx";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://10.0.2.2:52564/xxxx.svc/soap";    

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy); 

    TextView textView = new TextView(this);

    setContentView(textView);

    SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);
    HttpTransportSE httpTransport = new HttpTransportSE(URL);

    try
    {
        httpTransport.call(SOAP_ACTION, envelope);  
        Object result = (Object)envelope.getResponse();
        textView.setText(result.toString());
    }
    catch (Exception exception)
    {
        textView.setText(exception.toString());
    }
}
}

person Kostaras    schedule 06.05.2014    source источник
comment
кажется, вы используете SOAP, чем почему синтаксический анализ json, вам нужно сделать синтаксический анализ SOAP, кажется   -  person Jitesh Upadhyay    schedule 06.05.2014
comment
тем не менее, если вы принимаете ответ в виде строки json, покажите данные json   -  person Jitesh Upadhyay    schedule 06.05.2014
comment
Я бы просто разобрал ответ мыла json на JSONObject, а затем извлек нужные значения. очевидно, вам нужно будет показать пример вашего json для примера того, как извлекать значения   -  person Nicolas Tyler    schedule 06.05.2014
comment
привет, ответ обновлен, пожалуйста, посмотрите   -  person Jitesh Upadhyay    schedule 06.05.2014
comment
Любая дополнительная помощь по этому поводу ??   -  person Kostaras    schedule 06.05.2014


Ответы (3)


Самый простой способ разобрать json на объекты — использовать сопоставитель объектов.

    ObjectMapper om = new ObjectMapper();
    YourClass object = om.readValue(jsonText, YourClass.class); 

Этот сопоставитель объектов от jackson:

http://fasterxml.github.io/jackson-databind/javadoc/2.0.0/com/fasterxml/jackson/databind/ObjectMapper.html

person Decoy    schedule 06.05.2014

Вы можете просто использовать объекты json для обработки ответа.

Вот выдержка из кода:

JSONObject obj = new JSONObject(envelope.getResponse().toString());
String Latitude = obj.getString("Latitude");
String Longitude = obj.getString("Longitude");

Это если ваш json выглядит так:

{
  Latitude: "1.00",
  Longitude: "1.00"
}

Согласно вашему комментарию, ваш json выглядит так:

[
  {
    "Description": "1",
    "Latitude": 0.369,
    "Longitude": 1.258
  },
  {
    "Description": "2",
    "Lati‌​tude": 1.369,
    "Longitude": 3.258
  },
  {
    "Description": "3",
    "Latitude": 2.369,
    "Longitude": 2.258
  }
]

вы можете извлечь значения следующим образом:

JSONArray obj = new JSONArray(envelope.getResponse().toString());
String[][] values = new String[obj.length()][3];
for(int i = 0; i < obj.length(); i++)
{
    values[i][0] = obj.getJSONObject(i).getString("Description");
    values[i][1] = obj.getJSONObject(i).getString("Latitude");
    values[i][2] = obj.getJSONObject(i).getString("Longitude");
}

Здесь может быть ошибка, я просто быстро написал это здесь.
Но вам нужно понять эту концепцию.

person Nicolas Tyler    schedule 06.05.2014
comment
[{Описание: 1, Широта: 0,369, Долгота: 1,258}, {Описание: 2, Широта: 1,369, Долгота: 3,258}, {Описание: 3, Широта: 2,369, Долгота: 2,258}] это мой веб-сервис - person Kostaras; 06.05.2014
comment
я получаю значение ошибки anyType типа java.lang.String не может быть преобразован в JSONObject - person Kostaras; 06.05.2014
comment
возможно, ваш json недействителен, вы можете вставить свой json на этот веб-сайт, чтобы проверить его: jsonviewer.stack.hu< /а> - person Nicolas Tyler; 06.05.2014
comment
[{Описание: 1, Широта: 0,369, Долгота: 1,258}, {Описание: 2, Широта: 1,369, Долгота: 3,258}, {Описание: 3, Широта: 2,369, Долгота: 2,258}] Это мой json, и все же я получить значение исключения любого типа типа java.lang.string не может быть преобразовано в JSONOBJECT - person Kostaras; 06.05.2014
comment
последнее значение в массиве значение "Longitude" недействительно json, если я скопирую его из комментария. Я не уверен, почему это недействительно. но если я заменю 2.‌​258 на любое другое число, оно будет действительным. - person Nicolas Tyler; 06.05.2014
comment
я бы предположил, что это ошибка кодирования строки или что-то в этом роде. но вы можете проверить это на jsonviewer.stack.hu, вы можете попробовать отправить значения в виде строки из сервис вместо double. поэтому ваш json будет выглядеть так: [ {Описание: 1, Широта: 0,369, Долгота: 1,258}, {Описание: 2, Широта: 1,369, Долгота: 3,258}, {Описание: 3, Широта: 2,369, Долгота: 2.‌​258 } ] - person Nicolas Tyler; 06.05.2014

как ваши данные json были

[
    {
        "Description": "1",
        "Latitude": 0.369,
        "Longitude": 1.258
    },
    {
        "Description": "2",
        "Latitude": 1.369,
        "Longitude": 3.258
    },
    {
        "Description": "3",
        "Latitude": 2.369,
        "Longitude": 2.258
    }
]

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

public class Detail {
    String description;
    Double lat;
    Double longi;

    public Detail(String description, Double lat, Double longi) {
        this.description=description;
        this.lat=lat;
        this.longi=longi;
    }
}

после этого сделайте arraylist следующим образом для Deatail

List<Detail> detailList=new ArrayList<Detail>();

и сделайте следующее

String jsondata = loadJSONFromAsset();//load data and assign as json string
        JSONArray primaryArray;
        try {
            primaryArray = new JSONArray(jsondata);

            for (int i = 0; i < primaryArray.length(); i++) {

                JSONObject jObject = primaryArray.getJSONObject(i);
                String description = (String) jObject.getString("Description");
                Log.d("Description", description);
                Double latitude =  jObject.getDouble("Latitude");
                Log.d("Latitude", latitude+"");
                Double longitude = jObject.getDouble("Longitude");
                Log.d("Longitude", longitude+"");

                detailList.add(new Detail(description, latitude, longitude));
            }
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

теперь вы можете получить все подробные данные из массива

person Jitesh Upadhyay    schedule 06.05.2014
comment
String jsondata = loadJSONFromAsset();//загружаем данные и назначаем как строку json. Что я должен использовать здесь... извините, я здесь новенький Спасибо - person Kostaras; 06.05.2014
comment
вам нужно передать строку json здесь, сделать этот метод и вернуть оттуда строку json !! - person Jitesh Upadhyay; 06.05.2014
comment
Можете ли вы объяснить мне, пожалуйста, как я могу это сделать ?? - person Kostaras; 06.05.2014
comment
пожалуйста, получите массив json как результат.toString() и используйте его!! - person Jitesh Upadhyay; 07.05.2014