使用JSONObject解析

article/2025/9/14 18:17:44

一、JSON数据

  1、JSON串访问方式:

   2、简介

– JSON(JavaScript Object Notation) 是一种轻量级的数据 交换格式。

– JSON 数据的书写格式:

                " KEY " : " VALUE "

JSON 结构有两种结构:

        1、对象(表的一列):对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的集合。

        2、数组(整个表):数组在js中是用中括号“[]”括起来的内容,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取, 字段值的类型可以是 数字、字符串、数组、对象几种。

例子:

   对象:

   数组:

二、JSONObject

  1、简介

        JSONObject是一种数据结构,可以理解为JSON格式的数据结构(key-value结构), 是一种重要的数据传输对象,可以使用put方法给JSONObject类的对象添加元素。

  2、添加方式

JSONObject jsonObject = new JSONObject();
jsonObject.put("id", 1);
jsonObject.put("name", "张三");
jsonObject.put("sex","M");
jsonObject.put("age", 19);
jsonObject.put("major", new String[] {"程序设计","人工智能"});
System.out.println(jsonObject.toString());

HashMap<String,Object> hashMap = new HashMap<>( );
hashMap.put("id", 1);
hashMap.put("name", "张三");
hashMap.put("sex","M");
hashMap.put("age", 19);
hashMap.put("major", new String[] {"程序设计","人工智能"});
System.out.println(new JSONObject(hashMap).toString());

User user = new User();
user.put("id", 1);
user.put("name", "张三");
user.put("sex","M");
user.put("age", 19);
user.put("major", new String[] {"程序设计","人工智能"});
System.out.println(new JSONObject(user));

        可以看出,JSONObject可以很方便的把其他对象转换成JSONObject对象,它还可 以将网络接收到的字符串数据转换成JSONObject对象。

String str = "{\"Number\":\"G14060101\",\"Name\":\"张三\",\"Sex\":\"女 \",\"Age\":20}";
JSONObject jsonObject = new JSONObject( str ); //str作为参数传入

  3、使用JSONObject解析JSON格式的字符串

    (1)JSONObject类提供的常用方法

函数说明
JSONObject()            创建一个空的JSONObject对象
getJSONObject(String key)     根据key获取对应的JSONObject对象
getJSONArray(String key)根据key获取对应的JSONObject数组
get(String key)根据key值获取JSONObject对象中对应的value值,返回的是Object 对象,需要手动转换为需要的数据类型
toString()将JSONObject对象转换为json格式的字符串

  

    (2)举例

                假设从服务器上返回的结果是一个JSON格式的字符串,如下图所示

 需求1:获取当前深圳的天气信息情况

        从返回的数据中可以发现,当前的天气信息存放在索引为“data”的区域内,需要 通过getJSONObject()方法获取到data区域下的数据。

//根据返回的字符串创建JSONObject对象
JSONObject jsonObject = new JSONObject(str);
JSONObject jsonData = jsonObject.getJSONObject("data");
//然后,再通过getString()方法迚行读值操作
String jsonTemplow = jsonData.getString("templow");
String jsonTempHigh = jsonData.getString("temphigh");
String jsonWeather = jsonData.getString("weather");
String jsonTempnow = jsonData.getString("tempnow");

需求2:获取当前深圳的各项指数提醒

         从返回的数据中可以发现,各 项指数提醒存放在索引为“index” 的JSON数组内,这需要通过 JSONArray类的相关操作了。接着,再把jsonArray中的数据 按分类进行解析,存放在不同的 ArrayList数组,分别命 名为names、levels、msgs等。

//根据返回的字符串创建JSONObject对象
JSONObject jsonObject = new JSONObject(str);
JSONObject jsonData = jsonObject.getJSONObject("data");
JSONArray jsonArray = jsonData.getJSONArray("index");
List<String> names = new ArrayList<String >();
List<String> levels = new ArrayList<String >();
List<String> msgs = new ArrayList<String >();
for (int i=0;i<jsonArray.length();i++){JSONObject partIndex = jsonArray.getJSONObject(i);String name = partIndex.getString("name");names.add(name);String level = partIndex.getString("level");levels.add(level);String msg = partIndex.getString("msg");msgs.add(msg);
}

项目实戓:“聚合数据”天气API

http://v.juhe.cn/weather/index?format=2&cityname=城市名&key=您申请的KEY

 注意:在使用该接口之前,首先需要用户进行注册,并获得相应的秘钥KEY

Postman软件

三、代码部分

  1、activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></android.support.constraint.ConstraintLayout>

  2、MainActivity.java

package com.example.zsjsonobject;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;import org.jetbrains.annotations.NotNull;
import org.json.JSONArray;
import org.json.JSONObject;import java.io.IOException;import okhttp3.Call;
import okhttp3.Response;public class MainActivity extends AppCompatActivity {//1.定义一个字符串变量,用来存放HTTP请求的网络地址public static final String address = "http://v.juhe.cn/weather/index?format=2&cityname=%E8%8B%8F%E5%B7%9E&key=ccfadb3491e63c1c3556f3ceb19e1237";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//2.调用工具类的sendOkHttpRequest()方法,获取服务器返回的天气信息HttpUtil.sendOkHttpRequest(address,new okhttp3.Callback(){@Overridepublic void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {//获取服务器返回的数据String responseData = response.body().string();//通过Postman可以发现,未来7天的天气信息存放在索引值为future的JSON数组中try{JSONObject jsonObject = new JSONObject(responseData);JSONObject jsonData = jsonObject.getJSONObject("result");JSONArray jsonArray = jsonData.getJSONArray("future");for(int i=0;i<jsonArray.length();i++){JSONObject partFuture = jsonArray.getJSONObject(i);String temperature = partFuture.getString("temperature");String weather = partFuture.getString("weather");String wind = partFuture.getString("wind");String week = partFuture.getString("week");String date = partFuture.getString("date");Log.d("MainActivity","temperature:"+temperature+" "+"weather:"+weather+" "+"wind:"+wind+" "+"week:"+week+" "+"date:"+date);}}catch (Exception e){}}@Overridepublic void onFailure(@NotNull Call call, @NotNull IOException e) {}});}
}

  3、HttpUtil.java

v

package com.example.zsjsonobject;import okhttp3.OkHttpClient;
import okhttp3.Request;public class HttpUtil {public static void sendOkHttpRequest(String address,okhttp3.Callback callback){//通过okHttp框架的异步请求方式来完成数据的抓取//1.获得OkHttpClient类的实例OkHttpClient client = new OkHttpClient();//2.创建Request对象,并通过属性设置目标网络地址,请求方式等Request request = new Request.Builder().url(address)   //将第一个参数传入url属性.build();//3.通过OkHttpClient类的实例调用newCall()方法来创建call对象,并把异步请求的结果送入回调接口client.newCall(request).enqueue(callback);}
}


http://chatgpt.dhexx.cn/article/RF3ZHvBd.shtml

相关文章

JSONObject使用方法详解

1.JSONObject介绍 JSONObject-lib包是一个beans,collections,maps,java arrays和xml和JSON互相转换的包。 2.下载jar包 http://xiazai.jb51.net/201707/yuanma/lib_jb51.rar 提供了除JSONObject的jar之外依赖的其他6个jar包&#xff0c;一共7个jar文件 说明&#xff1a;因为工作…

JSONObject使用方法

1.JSONObject介绍 JSONObject-lib包是一个beans,collections,maps,java arrays和xml和JSON互相转换的包。 2.下载jar包 http://files.cnblogs.com/java-pan/lib.rar 提供了除JSONObject的jar之外依赖的其他6个jar包&#xff0c;一共7个jar文件 说明&#xff1a;因为工作中项目…

JSONObject类

&#xff08;1&#xff09;是什么&#xff1f; 阿里巴巴提供的一个json快速转换工具类&#xff0c;实现了Map接口&#xff0c;通过Key Value形式存储数据&#xff0c;初始化大小为16&#xff0c;有参构造方法需要传入一个Map。 项目中实际用途&#xff1a; 用于Json转具体的Ob…

JSON, JSONObject, JsonObject

JSON是一个抽象类 JSONObject是一个继承自JSON的类 JSON,JSONObject 和 JsonObject 1. JAR 包不同&#xff0c;对于可以调用的内置方法函数也不同 JSONObject属于 org.json.JSONObject包&#xff0c; JsonObject 属于 com.google.gson.JsonObject包 2. 存储方式不同 JS…

JSONObject

JSONObject JSONObject 介绍 // JSONObject 是一个类 JSONObject jsonObject = new JSONObject(); // JSONObject 只是一种数据结构,可以理解为JSON格式的数据结构(key-value 结构),可以使用put方法给json对象添加元素。 // JSONObject可以很方便的转换成字符串,也…

js构造函数详解

典型的面向对象编程语言&#xff08;比如C和Java&#xff09;&#xff0c;存在“类”&#xff08;class&#xff09;这个概念。所谓“类”就是对象的模板&#xff0c;对象就是“类”的实例。但是&#xff0c;在JavaScript语言的对象体系&#xff0c;不是基于“类”的&#xff0…

JavaScript构造函数

什么是构造函数 构造函数&#xff08;Constructor&#xff09;的创建方式和普通函数一样。但通常首字母进行大写&#xff0c;用于和普通函数区分。 但是当一个函数创建好以后&#xff0c;我们并不知道它是不是构造函数&#xff08;即使函数名的首字母为大写&#xff09;。只有…

C#构造函数

在C#中&#xff0c;构造函数就是与类具有相同名称的成员函数&#xff0c;通常使用类中的构造函数来初始化类的成员属性。C#中的构造函数有三种&#xff1a; 第一种&#xff1a;实例构造函数。 当使用new关键字创建类的对象时&#xff0c;可以使用实例构造函数来初始化和创建类…

构造函数与拷贝构造函数

拷贝构造函数和构造函数不能分开说&#xff0c;他们都是初始化对象的一种方法。但是我们这里用构造函数辅助说明拷贝构造函数&#xff0c;主要说说拷贝构造函数的声明&#xff0c;用途和使用注意事项。 众所周知&#xff0c;构造函数是一个初始化类对象的函数&#xff0c;即使不…

C# 静态构造函数

目录 写在前面语法格式用法与特性主要作用语法特性 关于泛型的测试测试代码运行结果 写在前面 今天在创建WPF自定义控件时&#xff0c;在模板代码中看到了静态构造函数这种写法&#xff0c;说来惭愧&#xff0c;以前在Java用过这种语法&#xff0c;心知C#也应该会有的&#xf…

构造函数详解

构造函数详解 类的6个默认的成员函数 构造函数的概念&#xff1a; 构造函数是一个特殊的成员函数&#xff0c;名字与类名相同&#xff0c;创建类类型对象时由编译器自动调用&#xff0c;保证每个数据成员都有一个合适的初始值&#xff0c;并且在对象的生命周期内只调用一次。…

C++中的指针类型与构造函数,析构函数

1. 指针类型的作用 1.1 指针取出字节 任何类型的指针占用的空间大小都是相同的 &#xff08;32位CPU是4字节&#xff1b;64位CPU是8字节&#xff09; 既然任何类型的指针占用的空间大小都是相同的&#xff0c;为什么指针还需要类型呢&#xff1f; 指针只是指向了一个内存地址…

c++拷贝构造函数

一. 什么是拷贝构造函数 首先对于普通类型的对象来说&#xff0c;它们之间的复制是很简单的&#xff0c;例如&#xff1a; int a 100; int b a; 而类对象与普通对象不同&#xff0c;类对象内部结构一般较为复杂&#xff0c;存在各种成员变量。 下面看一个类对象拷贝的简单…

C++构造函数

文章目录 1 构造函数的定义及特征2 默认构造函数2.1 合成的默认构造函数2.1.1 默认初始化2.1.2 合成的默认构造函数初始化类成员变量的规则2.1.3 有些场合不能使用合成的默认构造函数 2.2 全缺省的默认构造函数&#xff08;参数都为默认实参的构造函数&#xff09; 3 构造函数初…

C++ 构造函数详解

目录 0. 什么是构造函数 1. 默认构造函数 2. 一般构造函数 3. 拷贝构造函数 4. 转换构造函数 5. 移动构造函数 0. 什么是构造函数 在定义类的成员函数的时候&#xff0c;一般的成员函数与普通的全局函数没有太大的区别&#xff0c;在定义函数的时候都需要说明要返回的类…

【C++要笑着学】类的默认成员函数详解 | 构造函数 | 析构函数 | 构造拷贝函数

&#x1f525; &#x1f525; &#x1f525; &#x1f525; &#x1f525; 火速猛戳订阅 &#x1f449; 《C要笑着学》 &#x1f448; 趣味教学博客 &#x1f525; &#x1f525; &#x1f525; &#x1f525; &#x1f525; [ 本篇博客热榜最高排名&#xff1a;7 ] 写在前…

JSF 文档参考

转自&#xff1a;http://blog.csdn.net/ontheway20/article/details/38532241 A4J 用户指南 目录 1. 介绍 2. 开始使用Ajax4jsf 环境需求 下载Ajax4jsf 安装 简单的 AJAX Echo 项目 JSP 页面 数据 Bean faces-config.xml Web.xml 部署 3. Ajax4jsf 框架的基本概念 介绍 结构概…

IDEA 2020.2 部署JSF项目

目录 一、用Glassfish部署JSF项目 1、下载glassfish 2、配置glassfish环境变量 3、修改jdk环境变量 4、测试glassfish是否可以正常启动 5、在IDEA中创建一个JSF项目 6.问题&#xff1a;部分标签元素无法显示 二、用tomcat部署JSF项目 1、新建项目或者模块&#xff0c;…

JSF教程(1)——简介 + HelloWorld

在写第一个HelloWorld之前先来宏观的了解一下JSF&#xff0c;也许你之前使用过Struts&#xff08;1或者2&#xff09;&#xff0c;SpringMVC&#xff0c;甚至于直接采用JSPServelet开发过web层。JSF与这些最大的不同是JSF是基于一种以组件为中心的用户界面&#xff08;UI&#…

JSF程式

概述&#xff1a; jsf使用spring的依赖注入的思想使得页面和业务逻辑更好的分离开来&#xff0c;页面与页面的跳转&#xff0c;逻辑关系&#xff0c;页面与后台不同的beans的对应和操作都是通过faces-config.xml文件来说明和配置。对程序员的要求不高&#xff0c;页面程序员可…