java json帮助类_java 写一个JSON解析的工具类

fed773db50813e2fe338b5a85727d0db.png

上面是一个标准的json的响应内容截图,第一个红圈”per_page”是一个json对象,我们可以根据”per_page”来找到对应值是3,而第二个红圈“data”是一个JSON数组,而不是对象,不能直接去拿到里面值,需要遍历数组。

下面,我们写一个JSON解析的工具方法类,如果是像第一个红圈的JSON对象,我们直接返回对应的值,如果是需要解析类似data数组里面的json对象的值,这里我们构造方法默认解析数组第一个元素的内容。

在src/main/java下新建一个包:com.qa.util,然后在新包下创建一个TestUtil.java类。

packagecom.qa.util;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;public classTestUtil {/***

*@paramresponseJson ,这个变量是拿到响应字符串通过json转换成json对象

*@paramjpath,这个jpath指的是用户想要查询json对象的值的路径写法

* jpath写法举例:1) per_page 2) data[1]/first_name ,data是一个json数组,[1]表示索引

* /first_name 表示data数组下某一个元素下的json对象的名称为first_name

*@return, 返回first_name这个json对象名称对应的值*/

//1 json解析方法

public staticString getValueByJPath(JSONObject responseJson, String jpath) {

Object obj=responseJson;for(String s : jpath.split("/")) {if(!s.isEmpty()) {if(!(s.contains("[") || s.contains("]"))) {

obj=((JSONObject) obj).get(s);

}else if(s.contains("[") || s.contains("]")) {

obj= ((JSONArray)((JSONObject)obj).get(s.split("\\[")[0])).get(Integer.parseInt(s.split("\\[")[1].replaceAll("]", "")));

}

}

}returnobj.toString();

}

}

简单解释下上面的代码,主要是查询两种json对象的的值,第一种最简单的,这个json对象在整个json串的第一层,例如上面截图中的per_page,这个per_page就是通过jpath这个参数传入,返回的结果就是3. 第二种jpath的查询,例如我想查询data下第一个用户信息里面的first_name的值,这个时候jpath的写法就是data[0]/first_name,查询结果应该是Eve。

======================================================================================

======================================================================================

将接口请求返回的 response 转换成 json 格式

/***

*@paramresponse, 任何请求返回返回的响应对象

*@return, 返回响应体的json格式对象,方便接下来对JSON对象内容解析

* 接下来,一般会继续调用TestUtil类下的json解析方法得到某一个json对象的值

*@throwsParseException

*@throwsIOException*/

public JSONObject getResponseJson (CloseableHttpResponse response) throwsParseException, IOException {

Log.info("得到响应对象的String格式");

String responseString= EntityUtils.toString(response.getEntity(),"UTF-8");

JSONObject responseJson=JSON.parseObject(responseString);

Log.info("返回响应内容的JSON格式");returnresponseJson;

}

//对象转换成Json字符串

//Users user = new Users("Anthony","tester");

//String userJsonString = JSON.toJSONString(user);

======================================================================================

======================================================================================

Python 用 json 将 string 、dict 互相转换

#!/usr/bin/env python#-*- coding: utf-8 -*-

importjson

string_json= "{"\"\"status\": \"error\","\"\"messages\": [\"Could not find resource or operation 'BZK1.MapServer' on the system.\"],"\"\"code\": 404"\"}"

print('对象:' +string_json)print(type(json.loads(string_json)))print('取值:' + json.loads(string_json)['status'])print('取值:' + str(json.loads(string_json)['code']))print('===========================================')

data1= {'b': 789, 'c': 456, 'a': 123}

encode_json=json.dumps(data1)print(type(encode_json))print(encode_json)print('===========================================')

decode_json=json.loads(encode_json)print(type(decode_json))print(decode_json['a'])print(decode_json)

运行的结果如下:

对象:{"status": "error","messages": ["Could not find resource or operation 'BZK1.MapServer' on the system."],"code": 404}取值:error

取值:404

===========================================

{"b": 789, "c": 456, "a": 123}===========================================

123{'b': 789, 'c': 456, 'a': 123}

======================================================================================

======================================================================================

d90bf7d987f2be75944996d741aeef8c.png    public static voidmain(String[] args) {

//从字符串解析JSON对象

JSONObject obj = JSON.parseObject("{\"runoob\":\"菜鸟教程\"}");//从字符串解析JSON数组

JSONArray arr = JSON.parseArray("[\"菜鸟教程\",\"RUNOOB\"]\n");//将JSON对象转化为字符串

String objStr =JSON.toJSONString(obj);//将JSON数组转化为字符串

String arrStr =JSON.toJSONString(arr);

System.out.println("JSON.parseObject "+obj);

System.out.println("JSON.parseArray "+arr);

System.out.println("JSON.toJSONString "+objStr);

System.out.println("JSON.toJSONString "+arrStr);

}

输出结果如下:

JSON.parseObject {"runoob":"菜鸟教程"}

JSON.parseArray ["菜鸟教程","RUNOOB"]

JSON.toJSONString {"runoob":"菜鸟教程"}

JSON.toJSONString ["菜鸟教程","RUNOOB"]

从 Java 变量到 JSON 格式的编码过程如下:

public voidtestJson() {

JSONObject object= newJSONObject();//string

object.put("string","string");//int

object.put("int",2);//boolean

object.put("boolean",true);//array

List integers = Arrays.asList(1,2,3);

object.put("list",integers);//null

object.put("null",null);

System.out.println(object);

}

在上例中,首先建立一个 JSON 对象,然后依次添加字符串、整数、布尔值以及数组,最后将其打印为字符串。

输出结果如下:

{"boolean":true,"string":"string","list":[1,2,3],"int":2}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关键字驱动测试示例_带有示例的False关键字

关键字驱动测试示例Python False关键字 (Python False keyword) False is a keyword (case-sensitive) in python, it is a Boolean value (a value of class type bool). False is the result of a comparison operation. False是python中的关键字(区分大小写),它是…

DC (域控制器)上 DNS 不查询非掌管 Domain(域) 的解决办法 --(转)

如何移除根 DNS 区域 运行 Windows Server 2003 的 DNS 服务器在它的名称解析过程中遵循特定的步骤。DNS 服务器首先查询它的高速缓存,然后检查它的区域记录,接下来将请求发送到转发器, 最后使用根服务器尝试解析。 默认情况下,Mi…

数据库主键的使用心得

1.数据库设置数据格式的作用其实是为了规范数据的存储 同时数值型也会便于后期统计, 如果每个字段都是varchar来存储就失去了他本身的意义了。 2.设置主键是为了让记录不重复,如监测站点,监测时间这样的联合主键有利于重复的记录进不去&#…

php函数的预加载

php代码的执行过程&#xff1a;词法分析-------语法分析------------编译-----------加载编译的代码--------执行 函数的预加载就是在加载编译的代码过程中&#xff0c;会把函数的代码加载到内存中去&#xff0c;搜易我们在执行代码的时候&#xff0c;函数已经在内存中了 <…

python none_None关键字,带Python示例

python nonePython None关键字 (Python None keyword) Note: None is not a keyword – we are just considering & writing it as a keyword which is a replacement of null (in C/C). 注意&#xff1a; None不是关键字–我们只是考虑并将其编写为关键字&#xff0c;以替…

永久勘误:微软等面试100题系列,答案V0.4版[第41-60题答案]

永久勘误&#xff1a;微软面试100系列答案V0.4版[第41-60题答案] 作者&#xff1a;July、何海涛等网友 ---------------------------几点声明: I、 此微软面试100题系列永久更新&#xff0c;答案永久勘误&#xff0c;永久优化。随时&#xff0c;永远&#xff0c;欢迎&#xff…

php中的__FUNCTION__

__FUNCTION__:魔术常量&#xff0c;获取函数名 <?phpheader(content-type:text/html;charsetutf-8);function fun(){echo __FUNCTION__;}fun(); ?>

退出win不保存设置

退出win不保存设置 最后我们把“组策略”请出来做一点变动。在运行框键入“gpedit.msc”&#xff0c;确定后&#xff0c;进入组策略窗口。打开“用户配置”/“管理模块”/“桌面”&#xff0c;选中“退出时不保存设置”&#xff0c;鼠标右键“属性”&#xff0c;将“策略”页“…

java调用 solr集群_Solr集群安装Version5.5.2(cloud模式)

Solr安装cloud模式,基于Solr的安装版本为5.5.2。安装规划SolrIP/机器名安装软件运行进程zdh-7solrjarzdh-9solrjarzookeeperzdh-7:2181,zdh-8:2181,zdh-9:2181安装用户solrcloud/zdh1234 hadoopuseradd -g hadoop -s /bin/bash -md /home/solrcloud solrcloud安装步骤1.使用sol…

elif python_elif关键字,带Python示例

elif pythonPython Elif关键字 (Python elif keyword) elif is a keyword (case-sensitive) in python, it is used in the conditional statement, if we have multiple conditions to be checked, we have to use elif keyword to check next condition. elif是python中的一…

今天看明白了,为什么有些属性会这样写了:public string status{get;set;}

自动实现的属性在 C# 3.0 和更高版本中&#xff0c;当属性的访问器中不需要其他逻辑时&#xff0c;自动实现的属性可使属性声明更加简洁。 客户端代码还可通过这些属性创建对象。 如下面的示例所示声明属性时&#xff0c;编译器将创建一个私有的匿名支持字段&#xff0c;该字段…

数字图像的大小、所需比特数(二维)

二维数字图像所需的比特数根据公式&#xff1a; 其中&#xff1a; b&#xff1a;数字图像所需的比特数 MN&#xff1a;数字图像的行和列 k&#xff1a;由灰度级算出&#xff0c;公式如下&#xff1a; L&#xff1a;图像的灰度级 比如&#xff1a; 存储一幅大小为 1024x1024&a…

ASP.NET中使用web.config配置web应用程序中的数据库连接

[摘要]&#xff1a;在web.config文件中保存数据库连接配置信息,可以让你无须重新编译应用程序即可更新应用程序的某些属性。当你想把数据库迁移到另一个不同的服务器&#xff0c;你只需要修改web.config文件中的数据库连接配置信息而已&#xff0c;并不需要重新编译和重新部署这…

c+ +三角函数_C ++中的三角函数

c 三角函数C 三角函数 (C Trigonometric functions) Trigonometric functions are also called circular functions or angle functions or goniometric functions, which are used to trigonometric computations like computing cosine, sine, tangent values. 三角函数也称为…

4邻接、8邻接、m邻接

在认识这些之前&#xff0c;我们首先要认识4领域、8领域 4领域&#xff1a; 像素p的坐标是(x,y)&#xff0c;那么他的4领域坐标N4是&#xff1a;&#xff08;x1,y&#xff09;、(x-1,y)&#xff0c;&#xff08;x&#xff0c;y1&#xff09;、(x,y-1) 8领域&#xff1a; 点p的…

RST_n的问题

有一个灰常郁闷的问题。。。 module CLK_Generater( input CLOCK_100, input RST_n, input Key, output reg [3:0] CLK_DivChoose, );reg [19:0] count; …

java aop注解拦截_Spring AOP 拦截指定注解标识的类或方法

代码DemoAspectComponentOrder(10)public class BidAuthorityProxy {/*** 扫描指定包下的类中使用EnableRoleAuthority注解修饰的类*/Around("within(com.core.annotation.EnableRoleAuthority) && within(com.bid..*)")public Object verifyRoleExecuteComm…

其实我是一个很偏激的人,不信你打我一下试试看

rt转载于:https://www.cnblogs.com/rexhost/archive/2004/09/23/45969.html

python关键字和保留字_或带有Python示例的关键字

python关键字和保留字Python或关键字 (Python or keyword) or is a keyword (case-sensitive) in python, it is a logical operator actually, it is used to validate more than one conditions. It is similar to Logical OR (||) operator in C, C programming. It require…

php的文件包含总结 include require include_once require_once

文件包含相当于将另一个文件的代码全部复制到另一个文件中&#xff0c;然后执行。包含文件很有用&#xff0c;如果您需要在网站的多张页面上引用相同的 PHP、HTML 或文本的话。比如说我们在浏览csdn很多页面中&#xff0c;基本都是看到下面的内容&#xff0c;为了不要每次都要写…