首页 > 其他分享 >JSON解析

JSON解析

时间:2022-12-06 14:39:16浏览次数:36  
标签:String 对象 JSON key new 解析 public


Android开发中,与服务器交互80%是通过JSON方式传输数据,JSON也是基于纯文本的数据格式,JSON具有跨平台的优势,相对XML,JSON解析起来更方便,简单,解析数据所消耗的流量也会比XML少,而且JSON有一些好的第三方库文件,已为开发者封装好了。

JSON语法规则:

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

JSON 名称/值对

JSON 数据的书写格式是:名称/值对

名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:比如;"firstName":"John"

JSON 值



JSON 值可以是:


  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null

比如值是基本类型

 



    1. {"city":"Beijing","street":" Chaoyang Road ","postcode":100025}


    {}代表是一个对象,这些都是简单的key/value形式,如果用对象来表示的话:


    1. public class Info {  
    2. public String city;
    3. public String street;
    4. public int postcode;
    5. }


    在这个JavaBean中并没有使用get,set方法,因为get,set方法是使用反射做的,比较慢,这是JSON最简单的方式,key/value形式,我们知道json有三种方式,一种是key/value,key/Object,key/array,现在讲讲key/Object形式:

    比如:




      1. {"name":"Michael","address":{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}}


      这里有2个对象,一个是最外面的,一个是address:它也是一个对象,我们说了{}就代表一个对象,因此 首先写里面的对象,然后再写外面的对象,代码如下:

      Info.java


      1. package com.jackie.json;  
      2.
      3. public class Info {
      4. public String city;
      5. public String street;
      6. public int postcode;
      7. }


      Person.java



      1. /**
      2. * {"name":"Michael","address":{"city":"Beijing","street":" Chaoyang Road ","postcode":100025}}
      3. * @author carpool
      4. *
      5. */
      6. public class Person {
      7. public String name;
      8. public Info info;
      9. }


      JSON解析代码:



      1. </pre><pre class="java" name="code">String jsonString = getJsonString();  
      2. try {
      3. new//最先解析最外层的{}
      4. new Person();
      5. new Info();
      6. "address").getString("city");
      7. "address").getString("street");
      8. "address").getInt("postcode");
      9. p.info = info;
      10. "name");
      11. catch (JSONException e) {
      12. e.printStackTrace();
      13. }

      现在还剩下一个种形式JSON,就是key/array,比如:



      1. {  
      2. "people": [
      3. {
      4. "firstName": "Brett",
      5. "lastName": "McLaughlin",
      6. "email": "aaaa"
      7. },
      8. {
      9. "firstName": "Jason",
      10. "lastName": "Hunter",
      11. "email": "bbbb"
      12. },
      13. {
      14. "firstName": "Elliotte",
      15. "lastName": "Harold",
      16. "email": "cccc"
      17. }
      18. ]
      19. }


      我们知道{}代表的是一个对象,[]代表的是数组,表示数组中存放了很多对象,对象之间用逗号(,)分开,

      这个用对象封装一般有二种形式,一是直接用集合把解析的对象存储起来,二是用一个类封装一个集合,集合的对象就是上面所解析的对象即可

      第一种方式:

      People.java

      1. public class People {  
      2. public String firstName;
      3. public String lastName;
      4. public String email;
      5. }


      解析:



      1. String jsonString = getJsonString(); //JSON串  
      2. try {
      3. new//最先解析最外层的{}
      4. "people");
      5. new ArrayList<People>();
      6. for(int i = 0; i < ja.length(); i++){
      7. new People();
      8. "email");
      9. "firstName");
      10. "lastName");
      11. ps.add(p);
      12. }
      13. catch (JSONException e) {
      14. e.printStackTrace();
      15. }

      第二种写法:



      1. public class MultiplePeople {  
      2. public List<People> peoples;
      3. }




      1. String jsonString = getJsonString();//json串  
      2. try {
      3. new JSONObject(jsonString);
      4. "people");
      5. new MultiplePeople();
      6. new ArrayList<People>();
      7. for(int i = 0; i < ja.length(); i++){
      8. new People();
      9. "email");
      10. "firstName");
      11. "lastName");
      12. ps.add(p);
      13. }
      14. multiplePeople.peoples = ps;
      15. catch (JSONException e) {
      16. e.printStackTrace();
      17. }

      标签:String,对象,JSON,key,new,解析,public
      From: https://blog.51cto.com/u_11407799/5915737

      相关文章