解析JSON数据之JSONObject

本文介绍了JSON数组的语法规则,包括其由多个JSONObject组成,以逗号分隔,并用方括号包围。示例展示了如何解析和访问JSON数组中的元素。还提及了在Android开发中,可以使用JSONObject来解析JSON数据,例如通过OkHttp获取本地服务器的json数据并进行解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSON 数组是在JSON对象中延伸出来的,多个JSONObject对象就是一个JSONArray,数据之间由逗号分隔,花括号{}保存对象,方括号[]保存数组。

[]一个数组JSONArray,里面可有多个{}元素JSONObject对象,每个元素JSONObject又有若干字段属性("Key":"Value")

JSON数组语法规则

  • JSONArray 最外层是“[”和“]”包裹起来的:如[{"domain":"sojson.com"}]
  • JSONArray 是由一个或多个 JSONObject 组合起来的:如[{"domain":"sojson.com"},{"age":"5年"}]
  • 多个 JSONObject 由逗号分隔。
  • JSONArray 取值通过下标或者迭代获取每一个element:如[{"domain":"sojson.com"},{"age":"5年"}][0].domain

上面的[{"domain":"sojson.com"},{"age":"5年"}][0].domain后面跟着“[0]”就是获取第一个元素(JSONObject),然后取它的name属性。

  1. var jsonArray = [{"domain":"sojson.com"},{"age":"5年"}];
  2. alert(jsonArray[0].name);//sojson.com

JSON 数组

JSON 数组在方括号("[]")中书写,数组可包含多个对象,如下“star_male”描述

{
    "star_male": [
        {
            "name": "鹿晗",
            "age": "26"
        },
        {
            "nickname": "李易峰",
            "age": "29"
        },
        {
            "nickname": "陈赫",
            "lastName": "31"
        }
    ]
}

在上面的例子中,对象 "star_male" 是包含三个对象的数组。每个对象代表一条关于一个明星(姓名和年龄)的记录。

使用JSONObject:

解析json数据,官方提供的JSONObject,当然还有开源的GSON、JackSon、FastJSon等等

  • 本地Apache服务器中的get_data.json:

  • 这里直接用OkHttp请求访问本地Apache服务器中的get_data.json,返回的json数据在parseJsonByJSONObject(responseData);中解析
private void sendRequestWithOKHTTP() {
        new Thread(new Runnable() {  //新建子线程用于请求
            @Override
            public void run() {
                try {
                    OkHttpClient client=new OkHttpClient(); //创建OkHttpClient实例
                    Request request=new Request.Builder()   //借助Builder构建Request对象
                            .url("http://10.0.2.2/get_data.json").build();//指定访问的服务器地址是电脑本地
                    Response response=client.newCall(request).execute();
                    //调用OkHttpClient实例的newCall(request)获取Call对象,最后调用call的execute()获取response对象
                    //服务器返回的数据就在response对象里面
                    String responseData=response.body().string();  //取出数据
                    
                    //解析Json数据
                    parseJsonByJSONObject(responseData);

                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }).start();
    }
  • parseJsonByJSONObject(responseData):
private void parseJsonByJSONObject(String jsonData) {
        try{
            JSONArray jsonArray=new JSONArray(jsonData);  //Json数据可理解为数组,一个{}就是有个数组元素,只是里面还有其他属性
            /* 遍历json数组,取出每一个元素,而每一个元素都是一个JSONObject对象(又包含各个属性字段) */
            for (int i=0;i<jsonArray.length();i++){
                JSONObject jsonObject=jsonArray.getJSONObject(i);//取出对应下标的元素,每一个元素属于JSONObject对象
                String id=jsonObject.getString("id");     //一个JSONObject对象(又包含各个属性字段)
                String name=jsonObject.getString("name");
                String version=jsonObject.getString("version");
                //输出到控制台
                Log.d("MainActivity","id 是:"+id);
                Log.d("MainActivity","name 是:"+name);
                Log.d("MainActivity","version 是:"+version);

            }

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

①  get_data.json中使用[]Json数组JSAONArray,所以先直接把数据放在JSAONArray:JSONArray jsonArray=new JSONArray(jsonData)

②  循环遍历数组JsonArray,取出其中元素(元素类型就是一个JsonObject):JSONObjectjsonObject=jsonArray.getJSONObject(i)

③  每一个JSONObject对象又有对应键值对("键":"值"),调用:jsonObject.getString("Key");   即可取出

当然,当json数据jsonData只用{}一个JsonObject对象,直接getString("Key");取出里面对应的值即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值