Android parse JSONObject

У меня есть небольшая проблема с разбором json в моем приложении для Android.

Вот как выглядит мой json файл:

{
"internalName": "jerry91",
"dataVersion": 0,
"name": "Domin91",
"profileIconId": 578,
"revisionId": 0,
}

Как вы видите, эта структура немного странная. Я не знаю, как читать эти данные в моем приложении. Как я заметил, это все объекты, а не массивы:/

Ответ 1

Я бы пересчитал, используя gson.

Вот несколько ссылок для учебных пособий:

альтернативный для gson вы можете использовать Джексон

Эти библиотеки в основном анализируют ваш JSON для указанного вами класса Java.

Ответ 2

Вы всегда можете использовать старый добрый json.org lib. В вашем Java-коде:

  • Сначала прочитайте содержимое вашего json файла в String;
  • Затем проанализируйте его в JSONObject:

    JSONObject myJson = new JSONObject(myJsonString);
    // use myJson as needed, for example 
    String name = myJson.optString("name");
    int profileIconId = myJson.optInt("profileIconId");
    // etc
    

Ответ 3

чтобы узнать, есть ли строка JSONArray или JSONObject

JSONArray Строка похожа на это

[{
"internalName": "blaaa",
"dataVersion": 0,
"name": "Domin91",
"profileIconId": 578,
"revisionId": 0,
},
{
"internalName": "blooo",
"dataVersion": 0,
"name": "Domin91",
"profileIconId": 578,
"revisionId": 0,
}]

и эта строка как JSONOject

{
"internalName": "domin91",
"dataVersion": 0,
"name": "Domin91",
"profileIconId": 578,
"revisionId": 0,
} 

но как вызвать элементы из JSONArray и JSONObject?

JSNOObject информация называется так

сначала заполнить объект данными

JSONObject object = new JSONObject(
"{
\"internalName\": \"domin91\",
\"dataVersion\": 0,
\"name\": \"Domin91\",
\"profileIconId\": 578,
\"revisionId\": 0,
}"
);

теперь позволяет вызывать информацию из объекта

String myusername = object.getString("internalName");
int dataVersion   = object.getInt("dataVersion");

Если вы хотите вызывать информацию из JSONArray, вы должны знать, что такое номер позиции объекта, или вам нужно выполнить цикл JSONArray, чтобы получить информацию, например

циклический массив

for ( int i = 0; i < jsonarray.length() ; i++)
{
   //this object inside array you can do whatever you want   
   JSONObject object = jsonarray.getJSONObject(i);
}

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

//0 mean first object inside array
 JSONObject object = jsonarray.getJSONObject(0);

Ответ 4

Эта часть делает в onBackground в AsyncTask

  JSONParser jParser = new JSONParser();
 JSONObject json = jParser.getJSONFromUrl(url);


        try {

            result = json.getString("internalName");
                            data=json.getString("dataVersion");
                      ect..


        } catch (JSONException e) {
            e.printStackTrace();
        }

JsonParser

 public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

public JSONObject getJSONFromUrl(String url) {

    // Making HTTP request
    try {
        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "utf-8"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;

}
  }

Ответ 5

Я предлагаю вам использовать такую ​​библиотеку, как gson, как написал @jmeier ответ. Но если вы хотите обработать json с андроидами по умолчанию, вы можете использовать что-то вроде этого:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String s = new String("{\"internalName\": \"domin91\",\"dataVersion\": 0,\"name\": \"Domin91\",\"profileIconId\": 578,\"revisionId\": 0,}");

        try {
            MyObject myObject = new MyObject(s);
            Log.d("MY_LOG", myObject.toString());
        } catch (JSONException e) {         
            Log.d("MY_LOG", "ERROR:" + e.getMessage());
        }


    }

    private static class MyObject {
        private String internalName;
        private int dataVersion;
        private String name;
        private int profileIconId;
        private int revisionId;

        public MyObject(String jsonAsString) throws JSONException {
            this(new JSONObject(jsonAsString));
        }

        public MyObject(JSONObject jsonObject) throws JSONException {
            this.internalName = (String) jsonObject.get("internalName");
            this.dataVersion = (Integer) jsonObject.get("dataVersion");
            this.name = (String) jsonObject.get("name");
            this.profileIconId = (Integer) jsonObject.get("profileIconId");
            this.revisionId = (Integer) jsonObject.get("revisionId");
        }

        @Override
        public String toString() {
            return "internalName=" + internalName + 
                    "dataVersion=" + dataVersion +
                    "name=" + name +
                    "profileIconId=" + profileIconId + 
                    "revisionId=" + revisionId;
        }

    }

}

Ответ 6

Пожалуйста, проверьте парсинг ig-json или Logan Square для быстрой и легкой библиотеки JSON.

Для сравнения, это статистика разработчика Logan Square. введите описание изображения здесь