在Android中使用自带API操作Json

Json简介

  • JavaScript对象表示法(JavaScript Object Notation)
  • 是存储和交换文本信息的语法
  • 特点
    1. 是轻量级的文本数据交换格式
    2. 独立于语言和平台
    3. 具有自我描述性,更易理解

Json与XML

  • 类似XML,比XML更小、更快、更易解析
  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 使用数组
  • 不使用保留字

Json语法

  • 是JavaScript对象表示法语法的子集
    • 数组在键值对中
    • 数据由逗号分隔
    • 大括号保存对象
    • 中括号保存数组
  • Json值可以是
    • 数字(整数或浮点数)
    • 字符串(在双引号中)
    • 逻辑值(true或false)
    • 数组
    • 对象
    • null

Json对象

  • 在大括号中书写,可以包含多个键值对,如

    {"firstName":"John", "lastName":"Doe"}

Json数组

  • 在中括号中书写,可以包含多个对象,通过逗号分隔

    {
        "employees":[
            {"firstName":"John", "lastName":"Doe"},
            {"firstName":"Anna", "lastName":"Smith"},
            {"firstName":"Peter", "lastName":"Jones"}
        ]
    }

在Android中读取Json数据

  1. 准备数据test.json

    {
        "languages":[
            {"id":1, "ide":"Eclipse", "name":"Java"},
            {"id":2, "ide":"XCode", "name":"Swift"},
            {"id":3, "ide":"Visual Sutdio", "name":"C#"}
        ],
        "cat":"it"
    }
  2. 将test.json复制到项目的assets目录中
  3. 将test.json中的内容读取到一个字符串中

    StringBuilder sBuilder = new StringBuilder();
    
    try {
        InputStreamReader isr = new InputStreamReader(getAssets().open("test.json"), "UTF-8");
        BufferedReader br = new BufferedReader(isr);
        String line;
        while((line = br.readLine()) != null) {
            sBuilder.append(line);
        }
        br.close();
        isr.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
  4. 解析并显示Json数据

    try {
        JSONObject root = new JSONObject(sBuilder.toString());
        Log.d("Tag", "cat=" + root.getString("cat")); 
        JSONArray array = root.getJSONArray("languages");
        for (int i = 0; i < array.length(); i++) {
            JSONObject lan = array.getJSONObject(i);
            Log.d("Tag", "---------------------------------");
            Log.d("Tag", "id=" + lan.getInt("id")); //注意get方法要与json中实际数据类型一致
            Log.d("Tag", "ide=" + lan.getString("ide"));
            Log.d("Tag", "name=" + lan.getString("name"));
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
  5. 在Logcat中查看结果

   技术分享 

在Android中创建Json格式数据

  1. 需求:创建和上一个小节中test.json完全一致的数据
  2. 代码如下

    try {
        JSONObject root = new JSONObject();
        //1. 创建cat属性并赋值
        root.put("cat", "it");
    
        //2. 创建数组中的对象
        //{"id":1, "ide":"Eclipse", "name":"Java"}
        JSONObject lan1 = new JSONObject();
        lan1.put("id", 1);
        lan1.put("ide", "Eclipse");
        lan1.put("name", "Java");
    
        //{"id":2, "ide":"XCode", "name":"Swift"}
        JSONObject lan2 = new JSONObject();
        lan2.put("id", 2);
        lan2.put("ide", "XCode");
        lan2.put("name", "Swift");
    
        //{"id":3, "ide":"Visual Sutdio", "name":"C#"}
        JSONObject lan3 = new JSONObject();
        lan3.put("id", 3);
        lan3.put("ide", "Visual Sutdio");
        lan3.put("name", "C#");
    
        //3. 将对象放入数组中
        JSONArray array = new JSONArray();
        array.put(lan1);
        array.put(lan2);
        array.put(lan3);
    
        //将数组添置到root中
        root.put("languages", array);
    
        Log.d("Tag", root.toString());
    } catch (JSONException e) {
        e.printStackTrace();
    }
  3. 在Logcat中查看结果

    技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。