特殊JSON的解析————有点没搞太明白

JSON源码{ "code": 0, "list": { "0": { "aid": "6008965", "author": "哔哩哔哩番剧", "coins": 170, "copyright": "Copy", "create": "2016-08-25 21:34" }, "1": { "aid": "6008938", "author": "哔哩哔哩番剧", "coins": 404, "copyright": "Copy", "create": "2016-08-25 21:33" } } }

JSON里{}代表一个对象(类)[]代表一个数组,因此我们可以这样理解json对象,在一个封装的业务类里,有code这个变量,之后还有list这个内部类

public class json extends AppCompatActivity {

    private Button json;
    private TextView textjson;
    private Button json2;

    private JSONObject jsonObject;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_json);
        json = findViewById(R.id.json);
        textjson = findViewById(R.id.textjson);
        json2 = findViewById(R.id.json2);

     final  String jsons2="{\n" +
             "    \"code\": 0,\n" +
             "    \"list\": {\n" +
             "        \"0\": {\n" +
             "            \"aid\": \"6008965\",\n" +
             "            \"author\": \"哔哩哔哩番剧\",\n" +
             "            \"coins\": 170,\n" +
             "            \"copyright\": \"Copy\",\n" +
             "            \"create\": \"2016-08-25 21:34\"\n" +
             "        },\n" +
             "        \"1\": {\n" +
             "            \" aid\": \"6008938\",\n" +
             "            \"author\": \"哔哩哔哩番剧\",\n" +
             "            \"coins\": 404,\n" +
             "            \"copyright\": \"Copy\",\n" +
             "            \"create\": \"2016-08-25 21:33\"\n" +
             "        }\n" +
             "    }\n" +
             "}";
        final String jsons="  {\"temp\": \"20℃/30℃\",\"weather\": \"晴转多云\",\"name\": \"上海\",\"wind\": \"1级\"}";


        json.setOnClickListener(new View.OnClickListener() {


            @Override
            public void onClick(View v) {
                try {
                    jsonObject = new JSONObject(jsons);
                    String id=jsonObject.getString("temp");
                    String id1=jsonObject.getString("weather");
                    jsons jsons1=new jsons(id,id1);
                    textjson.setText(jsons1.toString());
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

        json2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                jsonspli jsonspli = new jsonspli();

                try {
                    jsonObject=new JSONObject(jsons2);
                    int code = jsonObject.optInt("code");

                    JSONObject list=jsonObject.optJSONObject("list");
                  jsonspli.setCode(code);
                    List<jsonspli.filmbean> lists=new ArrayList<>();
                  jsonspli.setList(lists);


                    for (int i=0;i<list.length();i++)
                    {
                        JSONObject jsonObject1=list.optJSONObject( i +"");
                        if(jsonObject1 !=null)
                        {
                            String aid=jsonObject1.optString("aid");
                            String author=jsonObject1.optString("author");
                            int coins = jsonObject1.optInt("coins");
                            String copyright = jsonObject1.optString("copyright");

                            String create = jsonObject1.optString("create");

                           jsonspli.filmbean filmbean=new jsonspli.filmbean();
                           filmbean.setAid(aid);
                           filmbean.setAuthor(author);
                           filmbean.setCoins(coins);
                           filmbean.setCopyright(copyright);
                           filmbean.setCreate(create);
                        lists.add(filmbean);


                        }
                    }

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

          textjson.setText(jsonspli.toString());


            }
        });


    }
}

这种情况是针对于Gson无法解析的,可以看到0和1这两个类,是不能封装成0和1 类名的,数字不能作为类名的起点,所以看到,list就是一个傀儡了,在java后期的代码中,list进去之后,就开始直接对1和0两个对象进行操作了。
有点明白了!是他将整个对象封装成了一个数组了,整个业务类来看,只有data和一个含有内部类泛型的list,只有的话再输出一定是一个含有多个内部类的了,具体都是在java代码里添加的
public class jsonspli {
private int code;
private List list;
public int getCode() {
return code;
}

public void setCode(int code) {
    this.code = code;
}

@Override
public String toString() {
    return "jsonspli{" +
            "code=" + code +
            ", list=" + list +
            '}';
}

public List<filmbean> getList() {
    return list;
}

public void setList(List<filmbean> list) {
    this.list = list;
}

public static class  filmbean{
    private String aid;
    private String author;
    private int coins;
    private String copyright;
    private String create;

    @Override
    public String toString() {
        return "filmbean{" +
                "aid='" + aid + '\'' +
                ", author='" + author + '\'' +
                ", coins=" + coins +
                ", copyright='" + copyright + '\'' +
                ", create='" + create + '\'' +
                '}';
    }

    public String getAid() {
        return aid;
    }

    public void setAid(String aid) {
        this.aid = aid;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public int getCoins() {
        return coins;
    }

    public void setCoins(int coins) {
        this.coins = coins;
    }

    public String getCopyright() {
        return copyright;
    }

    public void setCopyright(String copyright) {
        this.copyright = copyright;
    }

    public String getCreate() {
        return create;
    }

    public void setCreate(String create) {
        this.create = create;
    }
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值