android 解析JSON

来源:互联网 发布:linux查找日志技巧 编辑:程序博客网 时间:2024/05/01 22:59


JSON :一种轻量级的数据交换格式。

JSON建构的两种格式:

1:”名称/值 “对的集合

2:值得有序列表(数组)

格式示例如下:

{
  "user": [
    {
      "firstName": "Wang",
      "lastName": "Yo",
      "email": "44393xxx@qq.com"
    },
    {
      "firstName": "Yang",
      "lastName": "Gen",
      "email": "256472xxx@qq.com"
    }
  ]
}

 

解析JSON有多中方式 可以使用JsonReader解析,JSONReader android.untl包下的一个用于解析JSON的工具类,最低版要求是API11.

常用方法如下:

//创建JsonReader 对象

 

    JsonReader reader = new JsonReader(new StringReader(jsonData));

 

    //开始解析数组

 

    reader.beginArray();

 

    //循环判断有没有下一个Json对象

 

    while(reader.hasNext()){

 

    //开始解析Json对象

 

    reader.beginObject();

 

    }

 

    //循环判断Json对象里面有没有下一个键值对

 

    while(reader.hasNext()){

 

    String tagName = reader.nextName();

 

    if(tagName.equal("name")){

 

    //name键多对应的值

 

    reader.nextString();

 

    }else if(tagName.equal("age")){

 

    //age键多对应的值

 

    reader.nextString();

 

    }

 

    }

 

    //Json对象的结尾

 

    reader.endObject();

 

    }

 

    //数组解析的结尾

 

    reader.endArray();

示例如下:

1:创建一个json数据该文件存放于 (res/ raw/person.json

2:创建一个person类,包含上面xml中的属性生成toString方法即可

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void JSON_Click(View view) {
        ArrayList<Person> list = JsonReaders();
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
    private ArrayList<Person> JsonReaders() {
        ArrayList<Person> list = new  ArrayList<>();
        Reader r = new InputStreamReader(getResources().openRawResource(R.raw.person));
        JsonReader jr = new JsonReader(r);
        try {
            jr.beginObject();// 解析对象
            if(jr.hasNext()){
                if ("user".equals(jr.nextName())){
                    jr.beginArray();// 解析数组
                    while(jr.hasNext()){// 循环判断有没有下一个JSON对象
                     Person p = new Person();
                        jr.beginObject();
                        while (jr.hasNext()){
                            String name =jr.nextName();
                            if ("firstName".equals(name)){
                                p.firstName=jr.nextString();
                            }else if ("lastName".equals(name)){
                                p.lastName=jr.nextString();
                            }else if ("email".equals(name)){
                                p.email=jr.nextString();
                            }
                        }
                        jr.endObject();// JSON对象的结尾
                        list.add(p);
                    }
                    jr.endArray();// 数组解析的结尾
                }
            }
          jr.endObject();

        } catch (IOException e) {
            e.printStackTrace();
        }
  return list;
    }

运行至模拟器,在控制台即可看到响应的数据,

---------------------------------------------------------------------------------------------------------------------------------

 通过对象生成JSON数据

// 生成JSON数据
    public void create_JSON(View view) {
        ArrayList<Person> list = new ArrayList<>();
        Person p1 = new Person();
        p1.firstName = "Wang";
        p1.lastName = "Yon";
        p1.email = "44393xxx@qq.com";
        Person p2 = new Person();
        p2.firstName = "Yang";
        p2.lastName = "Gen";
        p2.email = "256472xxx@qq.com";
        list.add(p1);
        list.add(p2);
        JSONObject json = new JSONObject();
        JSONArray array = new JSONArray();
        try {
            for (int i = 0; i < list.size(); i++) {
                Person p = list.get(i);
                JSONObject obj = new JSONObject();
                //将对象假如JSONObject
                obj.put("firstName", p.firstName);
                obj.put("lastName", p.lastName);
                obj.put("email", p.email);
                array.put(obj);
            }
            json.put("person", array);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        System.out.println(json.toString() );
    }

-------------------------------------------------------------------------------------------------------------------------------

使用GSON解析JSON

谷歌为了方便解析JSON 数据,因此引入了GSON类库,可以吧java对象转化成JSON,也可以吧JSON转换为java对象且使用非常方便。

使用的时候应先导入响应的jar包。

1json数据如下:

 [
    {
      "firstName": "Wang",
      "lastName": "Yo",
      "email": "44393xxx@qq.com"
    },
    {
      "firstName": "Yang",
      "lastName": "Gen",
      "email": "256472xxx@qq.com"
    }
  ]

// 解析代码

{
  Gson gson= new Gson();
 Reader r = new InputStreamReader(getResources().openRawResource(R.raw.person));
 Type type= new TypeToken<ArrayList<Person>>(){}.getType();
 ArrayList<Person> list =gson.fromJson(r, type);
for (int i = 0 ; i <list.size();i++){
    System.out.println(list.get(i));
}

}

---------------------------------------------------------------------------------------------------------------------------------

 通过对象生成JSON数据

ArrayList<Person> list = new ArrayList<>();
    Person p1 = new Person();
    p1.firstName = "Wang";
    p1.lastName = "Yong";
    p1.email = "44393xxx@qq.com";
    Person p2 = new Person();
    p2.firstName = "Yang";
    p2.lastName = "Gen";
    p2.email = "2564725xxx@qq.com";
    list.add(p1);
    list.add(p2);
    Gson gson= new Gson();
    Type type= new TypeToken<ArrayList<Person>>(){}.getType();
    String json= gson.toJson(list, type);
    System.out.println(json);
}

 

 

 

 

0 0
原创粉丝点击