Синтаксический анализ JSON с помощью GSON

#java #android

#java #Android

Вопрос:

У меня есть следующая строка Json.Как проанализировать этот вид Json с помощью Gson в Java?Любая помощь будет оценена.

 {
"acclst":[{
        "accountInfoData":[{
                "userId":9,
                "rid":"1-Z5S3",
                "acnme":"acc_1234.",
                "actpe":"Fabricator / Distributor",
                "mph":"2660016354",
                "euse":"Biofuels",
                "com":"0",
                "sta":"Active",
                "stem":"BBUSER5",
                "wsite":"",
                "fax":"",
                "zone":"",
                "crted":"BBUSER4",
                "statusX":1,
                "partyId":0,
                "address":[]
            }
        ]
    }
],
"conlst":[],
"actlst":[],
"prolst":[],
"code":"200"
}
  

Ответ №1:

ваш класс Gson getter / Setter будет

sample.java

 public class sample {

    public String code="";
    ArrayList<String> conlst; 
    ArrayList<String> actlst;
    ArrayList<innerObject> prolst;

    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public ArrayList<String> getConlst() {
        return conlst;
    }
    public void setConlst(ArrayList<String> conlst) {
        this.conlst = conlst;
    }
    public ArrayList<String> getActlst() {
        return actlst;
    }
    public void setActlst(ArrayList<String> actlst) {
        this.actlst = actlst;
    }
    public ArrayList<innerObject> getProlst() {
        return prolst;
    }
    public void setProlst(ArrayList<innerObject> prolst) {
        this.prolst = prolst;
    }

}
  

innerObject.java

 public class innerObject {

    ArrayList<String> accountInfoData;

    public ArrayList<String> getAccountInfoData() {
        return accountInfoData;
    }

    public void setAccountInfoData(ArrayList<String> accountInfoData) {
        this.accountInfoData = accountInfoData;
    }


}
  

secondInnerObject.java

 public class secondInnerObject {

    public String userId="";
    public String rid="";
    public String acme="";
    public String actpe="";
    public String mph="";
    public String euse="";
    public String com="";
    public String sta="";
    public String stem="";
    public String wsite="";
    public String fax="";
    public String zone="";
    public String crted="";
    public String statusX="";
    public String partyId="";
    ArrayList<String> address;
    ArrayList<String> accountInfoData;

    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getRid() {
        return rid;
    }
    public void setRid(String rid) {
        this.rid = rid;
    }
    public String getAcme() {
        return acme;
    }
    public void setAcme(String acme) {
        this.acme = acme;
    }
    public String getActpe() {
        return actpe;
    }
    public void setActpe(String actpe) {
        this.actpe = actpe;
    }
    public String getMph() {
        return mph;
    }
    public void setMph(String mph) {
        this.mph = mph;
    }
    public String getEuse() {
        return euse;
    }
    public void setEuse(String euse) {
        this.euse = euse;
    }
    public String getCom() {
        return com;
    }
    public void setCom(String com) {
        this.com = com;
    }
    public String getSta() {
        return sta;
    }
    public void setSta(String sta) {
        this.sta = sta;
    }
    public String getStem() {
        return stem;
    }
    public void setStem(String stem) {
        this.stem = stem;
    }
    public String getWsite() {
        return wsite;
    }
    public void setWsite(String wsite) {
        this.wsite = wsite;
    }
    public String getFax() {
        return fax;
    }
    public void setFax(String fax) {
        this.fax = fax;
    }
    public String getZone() {
        return zone;
    }
    public void setZone(String zone) {
        this.zone = zone;
    }
    public String getCrted() {
        return crted;
    }
    public void setCrted(String crted) {
        this.crted = crted;
    }
    public String getStatusX() {
        return statusX;
    }
    public void setStatusX(String statusX) {
        this.statusX = statusX;
    }
    public String getPartyId() {
        return partyId;
    }
    public void setPartyId(String partyId) {
        this.partyId = partyId;
    }
    public ArrayList<String> getAddress() {
        return address;
    }
    public void setAddress(ArrayList<String> address) {
        this.address = address;
    }
    public ArrayList<String> getAccountInfoData() {
        return accountInfoData;
    }
    public void setAccountInfoData(ArrayList<String> accountInfoData) {
        this.accountInfoData = accountInfoData;
    }


}
  

для извлечения

 String json= "your_json_string";
Gson gson= new Gson();
sample objSample=gson.fromJson(json,sample.getClass());
  

вот и все

Комментарии:

1. но если я хочу получить вершину этого json.как получить в моем основном классе.

2. objSample.getacclst.get(0).getaccountInfoData.get(0).getacme().toString();

3. Я полный новичок в JSON. Итак, я читаю его текст в формате JSON, а затем читаю ваш код, и я в замешательстве. Я вижу, что самый первый «массив» включен в JSON. Но я не вижу никаких ссылок на это в Sample.java . И тогда prolst в JSON пуст, и пока ничего не указывает на тип Sample.java показывает «ArrayList<innerObject> prolst». Я предполагаю, что это, вероятно, должно быть (отсутствующим) acclst вместо prolst, верно?

4. Разве вы не должны использовать List<> (интерфейс) в отличие от ArrayList<> (реализация)? Или это проблематично для десериализации GSON?

Ответ №2:

Вы должны использовать JSONObject для анализа этого json в Android.

Взгляните на следующую ссылку.

http://developer.android.com/reference/org/json/JSONObject.html

Ответ №3:

Android уже содержит необходимые библиотеки JSON. Для ввода можно использовать допустимую строку или файл. Вот код и объяснение, взятые отсюда:

 import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;

public class JsonParser extends Activity {
    private JSONObject jObject;
    private String jString = "{"menu": {"id": "file", "value": "File", "popup": { "menuitem": [ {"value": "New",   "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"}]}}}";//write your JSON String here

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        try {
            parse();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void parse() throws Exception {
        jObject = new JSONObject(jString);

        JSONObject menuObject = jObject.getJSONObject("menu");
        String attributeId = menuObject.getString("id");
        System.out.println(attributeId);

        String attributeValue = menuObject.getString("value");
        System.out.println(attributeValue);

        JSONObject popupObject = menuObject.getJSONObject("popup");
        JSONArray menuitemArray = popupObject.getJSONArray("menuitem");

        for (int i = 0; i < 3; i  ) {
            System.out.println(menuitemArray.getJSONObject(i)
                    .getString("value").toString());
            System.out.println(menuitemArray.getJSONObject(i).getString(
                    "onclick").toString());
        }
    }
}
  

Ответ №4:

Здесь у вас есть учебное пособие, которое отвечает вашим потребностям — Android Gson