广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java JSONObject与JSONArray对象案例详解
  • 611
分享到

Java JSONObject与JSONArray对象案例详解

2024-04-02 19:04:59 611人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

JSONObject与jsONArray 最近在学习过程中用到了稍微复杂点的json数据需要将json数据解析出来,这里就截取一部分作为例子 1.JSONObject介绍 JSONO

JSONObject与jsONArray

最近在学习过程中用到了稍微复杂点的json数据需要将json数据解析出来,这里就截取一部分作为例子

1.JSONObject介绍

JSONObject-lib包是一个beans,collections,maps,java arrays和xml和JSON互相转换的包。

2.下载jar

xiazai.jb51.net/202109/yuanma/json-object-lib_jb51.rar

*或者在Maven的pom.xml文件中直接配置如下:


<dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
</dependency>

json数据:


{
    "cartypes":[
        {"id":1,"imgUrl":"img/l.jpg","bigimg": "img/d.jpg","title":"别克威朗","marketprice":"15.29","periods":"12",
           "endrepayone":"96800","endrepaytwo":"96800","endrepaythree":"93000",
           "endmonthone":"3408","endmonthtwo":"3408","endmonththree":"3278",
           "repayfirst":"15290","repaytwo":"22935", "repaythree":"30580",
           "monthrepayone":"3578","monthrepaytwo":"2878","monthrepaythree":"2478",
           "cardetails":            [{ 
             "imageId00": "img/first-bkwl.jpg",
             "imageId01": "img/bkwl01.jpg",
             "imageId02": "img/bkwl02.jpg",
             "imageId03": "img/bkwl03.jpg",
             "imageId04": "img/bkwl04.jpg",
             "carname": "别克",
             "carmatter": "威朗",
             "carvolume":"1.5L",
             "sitnum":"5",
             "cargearbox":"6挡手自一体",
             "caremission":"国V",
             "carldone":"一体式座舱",
             "carldtwo":"绒面内饰",
             "carldthree":"全景天窗",
             "carldfour":"展翼型HID大灯"
           }]
         },
         {"id":2,"imgUrl":"img/l.jpg","bigimg": "img/d.jpg","title":"英菲尼迪","marketprice":"18.98","periods":"12",
           "endrepayone":"126800","endrepaytwo":"126800","endrepaythree":"126800",
           "endmonthone":"4458","endmonthtwo":"4458","endmonththree":"4458",
           "repayfirst":"18980","repaytwo":"28470", "repaythree":"37960",
           "monthrepayone":"2738","monthrepaytwo":"1878","monthrepaythree":"998",
           "cardetails":             [{             "imageId00": "img/first.jpg",
             "imageId01": "img/yfnd01.jpg",
             "imageId02": "img/yfnd02.jpg",
             "imageId03": "img/yfnd03.jpg",
             "imageId04": "img/yfnd04.jpg",
             "carname": "英菲尼迪",
             "carmatter": "ESQ",
             "carvolume":"1.6L",
             "sitnum":"5",
             "cargearbox":"CVT无级变速",
             "caremission":"国V",
             "carldone":"定制轮毂",
             "carldtwo":"多功能方向盘",
             "carldthree":"LED尾灯",
             "carldfour":"真皮座椅"
           }]         }    ]
}
当接受到的是上面的json数据时,要获取到里面的键对应的值应该怎样做呢,比如要获取title的值,获取cardetails中的imageId02的值等。

面对这样数组与对象相互嵌套的情况需要一步步将数据拆分,主要思想还是根据键取值,对于数组类型还是需要先根据”下标”取出元素。这里还需要用到JSONObject与JSONArray。

将上面的json数据简化就是:(这里保留个id便于识别)


{
    "cartypes":[
              {
                 "id":1,"bigimg": "img/dt-bkwl.jpg",
                 "cardetails": [{ "imageId02": "img/bkwl02.jpg}]
               }               {          "id":2,"bigimg": "img/xxx.jpg",          "cardetails":[{"imageId002":"img/xx.jpg"}]               }             
     ]
}

这就是简化了的json数据,可以看出这个串最外层是一个大的键为cartypes的对象,而它的值是json数组形式的比较复杂的json数据。继续分析 [ ]的部分,可以看到,里面有两个数组元素,每个元素分别是被{ }包起来的json对象,他们的元素组成相同,再看每个元素里面包含几个键值对的数据,其中键cardetails的值又是一个嵌套的json数组,里面包含一个json对象。分析完毕。那该怎样才能(拿到数据)解析呢?

 使用JSONObject与JSONArray

一般取数据有两种方式,看需要选择。

方式①:

通过 JSONObject.getString("键")直接获取,这种方式只能每次获取一个。

 方式②

通过构建与json对象相应的bean来获取。

我在写上面的例子时用到了两种方式,由于需要使用到 id,bigimg以及cardetails中的大部分数据,因此我在使用时将cardetails封装成一个bean,方便使用,而其他用到的比较少,因此就直接根据键获取值。

另外需要注意的是,JSONObject,JSONArray分别对应的是json数据的两种格式。即{"张三" : "男"}  , [{ 张三" : " 男" }] ,使用时需要将其转换成对应的对象。

如(示例):


JSONObject jsonObject = JSONObject.fromObject(json);   //将json字符串转换为JSONObject
JSONArray jsonArray = JSONArray.fromObject(json);  //将json字符串转换为JSONArray

还有一点需要指出:在取键值是始终需要根据键取值,从外到内,取内层的键的值需要先获取外层键的值,如果跨越取值会报错。

下面演示取值:


JSONObject jsonObject = JSONObject.fromObject(json);   //将json字符串转化为JSONObject
String cartypes=jsonObject.getString("cartypes");      //通过getString("cartypes")取出里面的信息
JSONArray jsonArray = JSONArray.fromObject(cartypes);  //将取到的cartypes对应的(一组)值字符串转换为JSONArray
String id= job.getString("id");             //取id 
String bigImg = job.getString("bigimg");    //大图
System.out.println("bigImg:"+bigImg);       //可以显示已经拿到bigimg的值

由于cardetails下的基本都是需要的值,一个一个取值比较麻烦,因此将cardetails封装成一个bean  如下:

Cardetails.java


public class Cardetails {
    private String imageId00;
    private String imageId01;
    private String imageId02;
    private String imageId03;
    private String imageId04;
    private String carname;
    private String carmatter;
    private String carvolume;
    private int sitnum;
    private String cargearbox;
    private String  caremission;
    private String carldone;
    private String carldtwo;
    private String carldthree;
    private String carldfour;
    //get set 方法以及toString方法略
}

到这里,需要将cardetails中的键全转成Cardetails中的属性,方法如下:


//将cardetail封装成bean
JSONArray carDetailArr=job.getJSONArray("cardetails");//将json字符串转化为JSONArray
JSONObject carDetailObj = carDetailArr.getJSONObject(0);//获取数组第一个元素
Cardetails cardetails = (Cardetails) JSONObject.toBean(carDetailObj, Cardetails.class);//封装成bean
System.out.println("cardetails:"+cardetails); //能获取到数据

最后附上部分代码:


public void getICarDetail(int id){
        String json=null;
        try {
             json=iCarDetail.getICarDetail(id);//这里既是获取上面json数据
        } catch (Exception e) {
            e.printStackTrace();
        }
        int jsonId=0;//json数组里的id值
        JSONObject jsonObject = JSONObject.fromObject(json);   //将json字符串转化为JSONObject
        String cartypes=jsonObject.getString("cartypes");//通过getString("cartypes")取出里面的信息
        JSONArray jsonArray = JSONArray.fromObject(cartypes);  //将取到的cartypes对应的(一组)值字符串转换为JSONArray
        //遍历jsonarray 数组
        if(jsonArray.size()>0){
            for(int i=0;i<jsonArray.size();i++){
                JSONObject job = jsonArray.getJSONObject(i);//把每一个对象转成json对象
                jsonId=(int)job.get("id"); //得到每个对象中的id值
                if(jsonId==id){
                    //获取相关值
                    String title = job.getString("title");            
                    String bigImg = job.getString("bigimg");          
                    String repayFirst = job.getString("repayfirst");  
                    String endrepayone = job.getString("endrepayone");
                    String endmonthone = job.getString("endmonthone");
                    String marketprice = job.getString("marketprice");                    //将cardetail封装成bean
                    JSONArray carDetailArr=job.getJSONArray("cardetails");//将json字符串转化为JSONArray
                    JSONObject carDetailObj = carDetailArr.getJSONObject(0);//获取数组第一个元素
                    Cardetails cardetails = (Cardetails) JSONObject.toBean(carDetailObj, Cardetails.class);//封装成bean
                    //输出显示
                    System.out.println("******************");
                    System.out.println("jsonId:"+jsonId);
                    System.out.println("title:"+title);
                    System.out.println("bigImg:"+bigImg);
                    System.out.println("repayFirst:"+repayFirst);
                    System.out.println("endrepayone:"+endrepayone);
                    System.out.println("endmonthone:"+endmonthone);
                    System.out.println("marketprice:"+marketprice);
                    System.out.println("cardetails:"+cardetails);
}

到此这篇关于Java JSONObject与JSONArray对象案例详解的文章就介绍到这了,更多相关Java JSONObject与JSONArray对象内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java JSONObject与JSONArray对象案例详解

本文链接: https://www.lsjlt.com/news/134210.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java JSONObject与JSONArray对象案例详解
    JSONObject与JSONArray 最近在学习过程中用到了稍微复杂点的json数据需要将json数据解析出来,这里就截取一部分作为例子 1.JSONObject介绍 JSONO...
    99+
    2022-11-12
  • JavaScript style对象与CurrentStyle对象案例详解
    1、Style对象 style对象代表一个单独的样式声明,可以从应用样式的文档元素访问Style对象。style对象获取的是内联样式,即元素标签中style属性的值。 例子: &...
    99+
    2022-11-12
  • Java将json对象转换为map键值对案例详解
      本文的目的是把json串转成map键值对存储,而且只存储叶节点的数据   比如json数据如下:   {responseHeader:{status:0,QTime:0},spe...
    99+
    2022-11-12
  • Java类与对象详解(2)
      this引用 为什么要有this引用 先来看一个日期类的例子: ​public class Date { public int year; public int month; public int day; /...
    99+
    2023-09-01
    java 开发语言
  • Java类与对象详解(3)
    目录 封装 封装的概念 访问限定符 封装扩展之包 包的概念 导入包中的类 自定义包 基本规则 包的访问权限控制举例 常见的包 static 成员 static 修饰成员变量 static修饰成员方法  static 成员变量的初始化 代码...
    99+
    2023-08-31
    java 开发语言
  • Java面向对象类和对象实例详解
    目录1 - Java面向对象学习的三条主线2 - 面向过程与面向对象3 - 面向对象的三大特征4 - 面向对象分析方法分析问题的思路和步骤5 - 面向对象的思想概述6 - 类和对象的...
    99+
    2022-11-13
  • Java对象创建内存案例解析
    Java对象创建内存图解析 1. 栈 Java栈的区域很小 , 特点是存取的速度特别快,栈存储的特点是, 先进后出,存储速度快的原因: 栈内存, 通过 栈指针'来创...
    99+
    2022-11-12
  • Java语言面向对象编程思想之类与对象实例详解
    在初学者学Java的时候,面向对象很难让人搞懂,那么今天小编就来为大家把这个思想来为大家用极为简单的方法理解吧。首先我们来简单的阐述面向对象的思想。面向对象:官方的语言很抽象,我们把官方的解释和定义抛开。想想,自己有什么,对!!我们自己有手...
    99+
    2023-05-31
    java 面向对象 之类
  • 详解Java对象结构与对象锁的升级
    目录1.Java对象结构2.MarkWord的结构信息3.无锁、偏向锁、轻量级锁和重量级锁总结1. Java对象结构 Java对象结构包括三部分:对象头、对象体和填充字节,如图所示:...
    99+
    2022-11-13
  • Python中使用Frozenset对象的案例详解
    目录关于Frozensets创建一个新的Frozenset对象一旦创建了Frozenset,你就不能修改它了与 Frozensets 一起使用的方法Frozenset可以被转换为其他...
    99+
    2022-11-11
  • Java 类与对象重难点详解
    目录什么是类、对象?类和类的实例化字段的初始化类当中实现方法static 静态关键字封装private 实现封装setter 和 getter 方法构造方法this 关键字匿名对象什...
    99+
    2022-11-12
  • Java dom4j生成与解析XML案例详解
    一)dom4j介绍 使用方式:在pom.xml中导入dom4j对应的jar <dependency> <groupId>dom4j</gro...
    99+
    2022-11-12
  • Java Web中ServletContext对象详解与应用
    目录 ServletContext对象 获取上下文初始化参数的相关方法创建ServletContext对象  上下文初始化参数局部参数全局参数 ...
    99+
    2023-05-17
    javaweb servletcontext对象 java servletcontext
  • 详解Java中类与对象的关系
    目录前言一、类与对象的介绍二、类的实例化三.类与对象的使用方法3.1对象的初始化3.2内存显示图四.this的使用方法总结前言 已经开始类与对象的讲解了,正式步入了Java的道路了,...
    99+
    2023-05-19
    Java类 Java对象
  • Java面向对象之内部类案例讲解
    1. 内部类 很多时候我们创建类的对象的时候并不需要使用很多次,每次只使用一次,这个时候我们就可以使用内部类了 1.1 内部类概述 内部类就是在一个类的内部在定义一个类,比...
    99+
    2022-11-12
  • Java对象数组定义与用法详解
    Java对象数组是一种用于存储多个相同类型的对象的数据结构。它可以按照一定的顺序存储和访问对象,并且可以根据需要进行动态调整大小。要定义一个对象数组,可以使用以下语法:```ClassName[] arrayName = new Cla...
    99+
    2023-08-09
    Java
  • Json转化为Java对象的实例详解
    Json转化为Java对象的实例详解问题:前后端数据交互时,经常会遇到Json串与Java对象转化的问题,有的Java对象中还包含了List对象等。解决方案: 引入 json-lib包,Maven坐标如下:<dependency>...
    99+
    2023-05-31
    json java对象 ava
  • JavaScriptconsole对象与控制台使用示例详解
    目录1. console对象2. console的静态方法3. 自定义console4. 控制台命令行API4.1 $_4.2 $0-$44.3 $(selector)4.4 $x(...
    99+
    2022-11-13
    JavaScript console对象 JavaScript console控制台
  • Java之Error与Exception的区别案例详解
    首先,Error类和Exception类都是继承Throwable类 Error(错误)是系统中的错误,程序员是不能改变的和处理的,是在程序编译时出现的错误,只能通过修改程序才能修正...
    99+
    2022-11-12
  • Redis如何存储对象与集合示例详解
    前言 大家都知道在项目中,缓存以及mq消息队列可以说是不可或缺的2个重要技术。前者主要是为了减轻数据库压力,大幅度提升性能。后者主要是为了提高用户的体验度,我理解的是再后端做的一个ajax请求(异步),并且...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作