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.
![введите описание изображения здесь]()