【问题标题】:How to read this json data?如何读取这个 json 数据?
【发布时间】:2017-08-16 09:44:29
【问题描述】:

如何从服务器读取这个json数据

{
"DS": {
    "LST": [


     {
                "OID": 1,
                "OCD": "1",
                "OPE": "AIRCEL",
                "IPH": "Images/provider/aircelsm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 2,
                "OCD": "3",
                "OPE": "AIRTEL",
                "IPH": "Images/provider/airtelsm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 22,
                "OCD": "BSR",
                "OPE": "BSNL SPL RECHARGE",
                "IPH": "",
                "MIL": 0,
                "MXL": 0
            },
            {
                "OID": 4,
                "OCD": "4",
                "OPE": "BSNL Topup",
                "IPH": "Images/provider/bsnlsm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 6,
                "OCD": "5",
                "OPE": "DOCOMO",
                "IPH": "Images/provider/docomosm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 7,
                "OCD": "6",
                "OPE": "IDEA",
                "IPH": "Images/provider/ideasm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 8,
                "OCD": "7",
                "OPE": "MTS",
                "IPH": "Images/provider/mtssm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 5,
                "OCD": "8",
                "OPE": "RELAINCE",
                "IPH": "Images/provider/reliancesm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 3,
                "OCD": "9",
                "OPE": "VODAFONE",
                "IPH": "Images/provider/vodafonesm.jpg",
                "MIL": 10,
                "MXL": 10
            }
        ],
        "LST1": [
            {
                "OID": 10,
                "OCD": "0",
                "OPE": "AIRTEL DTH",
                "IPH": "Images/provider/airtelsm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 11,
                "OCD": "0",
                "OPE": "BIGTV",
                "IPH": "Images/provider/aircelsm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 12,
                "OCD": "0",
                "OPE": "DISH TV",
                "IPH": "Images/provider/dishtvsm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 9,
                "OCD": "0",
                "OPE": "SUN DIRECT",
                "IPH": "Images/provider/sundirectsm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 13,
                "OCD": "0",
                "OPE": "TATA SKY",
                "IPH": "Images/provider/tataskysm.jpg",
                "MIL": 10,
                "MXL": 10
            },
            {
                "OID": 14,
                "OCD": "0",
                "OPE": "VIDEOCON DTH",
                "IPH": "Images/provider/videoconsm.jpg",
                "MIL": 10,
                "MXL": 10
            }
        ]
}
}

为了读取上面的json类型,我使用了下面给出的方法

 Gson gson = new Gson();
                    Type listType = new TypeToken<List<SpinnerMenuItems>>(){}.getType();
                    List<SpinnerMenuItems> selectedNetwork = gson.fromJson(gson.toJson(result.getResult()), listType);
                    settingDropDown(selectedNetwork);

实际上我的问题是从 json 对象中读取 json 数组,并使用自定义适配器在列表视图中查看 json 数组。我不知道怎么读。

为了读取 json 对象,我使用了以下模型类

public class SpinnerMenuItems {
    @SerializedName("LST")
    String zeroList;
    @SerializedName("LST1")
    String firstList;

    public String getZeroList() {
        return zeroList;
    }

    public void setZeroList(String zeroList) {
        this.zeroList = zeroList;
    }

    public String getFirstList() {
        return firstList;
    }

    public void setFirstList(String firstList) {
        this.firstList = firstList;
    }

}

上面的模型类是读取json对象里面的列表。

下面的模型类是读取放在json对象里面的json数组

public class ListZero {

    @SerializedName("IPH")
    String images;
    @SerializedName("OID")
    String oid;
    @SerializedName("OPE")
    String ope;
    @SerializedName("OCD")
    String ocd;
    @SerializedName("MIL")
    String mil;

    public String getMxl() {
        return mxl;
    }

    public void setMxl(String mxl) {
        this.mxl = mxl;
    }

    public String getMil() {
        return mil;
    }

    public void setMil(String mil) {
        this.mil = mil;
    }

    public String getOcd() {
        return ocd;
    }

    public void setOcd(String ocd) {
        this.ocd = ocd;
    }

    public String getOpe() {
        return ope;
    }

    public void setOpe(String ope) {
        this.ope = ope;
    }

    public String getOid() {
        return oid;
    }

    public void setOid(String oid) {
        this.oid = oid;
    }

    public String getImages() {
        return images;
    }

    public void setImages(String images) {
        this.images = images;
    }

    @SerializedName("MXL")
    String mxl;

}

请帮助我如何读取放置在 json 对象内的 json 数组。就我而言,我需要读取唯一的一个 json 数组列表并在列表视图中查看该列表。如何读取json数组。

【问题讨论】:

  • 您是否尝试过我发布的答案?有帮助吗?它解决了问题吗?
  • @ ΦXocę 웃 Пepeúpa ツ 在你的回答中我怎样才能得到 json 数组列表
  • 使用吸气剂...但这是另一个问题...我对 json 序列化感兴趣,如果该工作请接受答案
  • 你检查过我更新的答案吗

标签: android json arraylist


【解决方案1】:

这是不正确的:

@SerializedName("LST")
String zeroList;
@SerializedName("LST1")
String firstList;

查看你的 json..

你没有字符串,但有一个对象列表....

这些对象看起来几乎像 ListZero 但您缺少 MXL 属性...


你的 pojo 应该看起来像

class SpinnerMenuItems {

    @SerializedName("LST")
    List<ListZero> zeroList;
    @SerializedName("LST1")
    List<ListZero> firstList;

    public List<ListZero> getZeroList() {
        return zeroList;
    }

    public void setZeroList(List<ListZero> zeroList) {
        this.zeroList = zeroList;
    }

    public List<ListZero> getFirstList() {
        return firstList;
    }

    public void setFirstList(List<ListZero> firstList) {
        this.firstList = firstList;
    }

}

你需要一个额外的课程(带 DS 的那个)

class DS {

    @SerializedName("DS")
    private SMI mSMI;

    public SMI getmSMI() {
        return mSMI;
    }

    public void setmSMI(SMI mSMI) {
        this.mSMI = mSMI;
    }
}

测试将 json 放在文件中并执行以下操作:

public static void main(String[] args) throws FileNotFoundException {
    Gson gson = new Gson();
    JsonReader reader = new JsonReader(new FileReader("./foo.json"));

    DS x = gson.fromJson(reader, DS.class);
    SMI mSMI = x.getmSMI();
    System.out.println(x.toString());
}

【讨论】:

  • 请简要发表您的答案,并说明如何读取json数据并设置为listview
  • 等一下!我需要导入 gson 库
【解决方案2】:
    public class Data {

    @SerializedName("OID")
    String oid;
    @SerializedName("OCD")
    String ocd;
    @SerializedName("OPE")
    String ope;
    @SerializedName("IPH")
    String ocd;
    @SerializedName("MIL")
    String mil;
    @SerializedName("MXL")
    String mxl;

    // generate getter/setters
    ...

}

public class DS {

@SerializedName("LST")
private List<Data> lstObject;

@SerializedName("LST1")
private List<Data> lst1Object;

// generate getter/setters
...
}

//parsing code.

            Gson gson = new Gson();
            List<Data> lstList = new ArrayList<>(); // LST
            List<Data> lst1List = new ArrayList<>();  /// LST1
            DS ds = new DS();

            JSONObject rootObj = jsonObject.getJSONObject("DS");
            JSONArray lstArray = rootObj.getJSONArray("LST");
            JSONArray lst1Array = rootObj.getJSONArray("LST1");

            for(int i=0; i<lstArray.length; i++) {
               JSONObject obj = lstArray.getJSONObject(i);
               Data data = gson.fromJson(obj.toString(), Data.class);
               lstList.add(data);
            }

            for(int i=0; i<lst1Array.length; i++) {
               JSONObject obj = lst1Array.getJSONObject(i);
               Data data = gson.fromJson(obj.toString(), Data.class);
               lst1List.add(data);
            }

            ds.setLST(lstList);
            ds.setLST1(lst1List);

【讨论】:

    【解决方案3】:
    public class ArrayObj{
        private int OID;
        private String OCD;
        private String OPE;
        private String IPH;
        private int MIL;
        private int MXL;
        ...
        add the getters and setters
    }
    

    public class LSTObject{
        private List<ArrayObj> LST;
        ...
        add the getters and setters
    }
    

    public class FinalJSON{
        private LSTObject DS;
        ...
        add the setters and getters
    }
    

    Gson gson = new Gson();
    FinalJSON finalJSON = gson.fromJson(jsonStr,FinalJSON.class);
    

    【讨论】:

    • Gson gson = new Gson(); FinalJSON finalJSON = gson.fromJson(jsonStr,FinalJSON.class);
    【解决方案4】:

    您可以使用http://www.jsonschema2pojo.org/ 工具轻松解析您的Json 数据。

    你的情况应该是这样的。

    com.example.DS.java

    package com.example;
    
    import java.util.List;
    import com.google.gson.annotations.Expose;
    import com.google.gson.annotations.SerializedName;
    
    public class DS {
    
    @SerializedName("LST")
    @Expose
    private List<LST> lST = null;
    @SerializedName("LST1")
    @Expose
    private List<LST1> lST1 = null;
    
    public List<LST> getLST() {
    return lST;
    }
    
    public void setLST(List<LST> lST) {
    this.lST = lST;
    }
    
    public List<LST1> getLST1() {
    return lST1;
    }
    
    public void setLST1(List<LST1> lST1) {
    this.lST1 = lST1;
    }
    
    }
    

    com.example.Example.java

    package com.example;
    
    import com.google.gson.annotations.Expose;
    import com.google.gson.annotations.SerializedName;
    
    public class Example {
    
    @SerializedName("DS")
    @Expose
    private DS dS;
    
    public DS getDS() {
    return dS;
    }
    
    public void setDS(DS dS) {
    this.dS = dS;
    }
    
    }
    

    com.example.LST.java

    package com.example;
    
    import com.google.gson.annotations.Expose;
    import com.google.gson.annotations.SerializedName;
    
    public class LST {
    
    @SerializedName("OID")
    @Expose
    private Integer oID;
    @SerializedName("OCD")
    @Expose
    private String oCD;
    @SerializedName("OPE")
    @Expose
    private String oPE;
    @SerializedName("IPH")
    @Expose
    private String iPH;
    @SerializedName("MIL")
    @Expose
    private Integer mIL;
    @SerializedName("MXL")
    @Expose
    private Integer mXL;
    
    public Integer getOID() {
    return oID;
    }
    
    public void setOID(Integer oID) {
    this.oID = oID;
    }
    
    public String getOCD() {
    return oCD;
    }
    
    public void setOCD(String oCD) {
    this.oCD = oCD;
    }
    
    public String getOPE() {
    return oPE;
    }
    
    public void setOPE(String oPE) {
    this.oPE = oPE;
    }
    
    public String getIPH() {
    return iPH;
    }
    
    public void setIPH(String iPH) {
    this.iPH = iPH;
    }
    
    public Integer getMIL() {
    return mIL;
    }
    
    public void setMIL(Integer mIL) {
    this.mIL = mIL;
    }
    
    public Integer getMXL() {
    return mXL;
    }
    
    public void setMXL(Integer mXL) {
    this.mXL = mXL;
    }
    
    }
    

    com.example.LST1.java

    package com.example;
    
    import com.google.gson.annotations.Expose;
    import com.google.gson.annotations.SerializedName;
    
    public class LST1 {
    
    @SerializedName("OID")
    @Expose
    private Integer oID;
    @SerializedName("OCD")
    @Expose
    private String oCD;
    @SerializedName("OPE")
    @Expose
    private String oPE;
    @SerializedName("IPH")
    @Expose
    private String iPH;
    @SerializedName("MIL")
    @Expose
    private Integer mIL;
    @SerializedName("MXL")
    @Expose
    private Integer mXL;
    
    public Integer getOID() {
    return oID;
    }
    
    public void setOID(Integer oID) {
    this.oID = oID;
    }
    
    public String getOCD() {
    return oCD;
    }
    
    public void setOCD(String oCD) {
    this.oCD = oCD;
    }
    
    public String getOPE() {
    return oPE;
    }
    
    public void setOPE(String oPE) {
    this.oPE = oPE;
    }
    
    public String getIPH() {
    return iPH;
    }
    
    public void setIPH(String iPH) {
    this.iPH = iPH;
    }
    
    public Integer getMIL() {
    return mIL;
    }
    
    public void setMIL(Integer mIL) {
    this.mIL = mIL;
    }
    
    public Integer getMXL() {
    return mXL;
    }
    
    public void setMXL(Integer mXL) {
    this.mXL = mXL;
    }
    
    }
    

    在此之后使用 Gson 将 json 解析为自定义模型

    Gson gson = new GsonBuilder().create();
    Example yourModelClass = gson.fromJson(yourJsonResponse, Example.class);
    

    从那里您可以从模型中访问您想要的任何内容。喜欢

    DS myDSObject = yourModelClass.getDS();
    List<LST> lST = myDSObject.getLST();
    
    LST myLSTObject = lST.get(0) // 1st Item. 
    

    那么这里里面的数组数据就可以得到像

     String oID= myLSTObject.getOID();
     String oCD=   myLSTObject.getOCD();
     String oPE=   myLSTObject.getOPE();
    

    ……类似的方法可以得到剩下的数据

    【讨论】:

    • 请告诉我如何让json数组在listview中查看
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多