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,一经查实,立即删除!

相关文章

php函数的预加载

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

php中的__FUNCTION__

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

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

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

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的…

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

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

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

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

php终止脚本执行(exit、die、return)

终止php的脚本执行&#xff0c;我们可以使用exit&#xff0c;die&#xff0c;return 0x01 exit和die&#xff0c; 当程序运行到他们时&#xff0c;直接退出程序&#xff0c;不在运行 <?phpheader(content-type:text/html;charsetutf-8);echo 使用exit前;echo <br>…

php的延时sleep函数

语法&#xff1a;sleep&#xff08;秒数&#xff09; <?phpheader(content-type:text/html;charsetutf-8);sleep&#xff08;5&#xff09;;echo 我的名字是DL_one; ?>输出时可以发现要等待一段时间才能输出 sleep函数在代码测试时很有用

PHP的foeach用法

PHP 4 引入了 foreach 结构&#xff0c;用foreach可以帮助我们简单遍历数组&#xff0c;foreach 仅能用于数组&#xff0c;当用于其它数据类型或者一个未初始化的变量时会产生错误。 其用法为&#xff1a; foreach(数组 as 键 > 值){//循环体}当数组只有值&#xff0c;没有…

不为事务而事务

背景&#xff1a; 最近在做一个项目&#xff0c;需要用到两个第三方组件&#xff1a;北京莲塘语音组件和CMailSever前者作为语音聊天室的二次开发组件&#xff0c;后者用于网站的小型邮件系统二次开发组件 需求&#xff1a; 用户在主程序登陆后&#xff0c;无须再次登陆…

bugzilla学习

October 03, 2003 bugzilla学习 Bugzilla是一个bug追踪系统&#xff0c;用以管理bug提交、bug消除&#xff0c;不仅能降低同样错误的重复发生&#xff0c;提高开效率&#xff0c;而且有助于项目管理的难度。更有人打算用借助此系统&#xff0c;用前人的bug来教育新来的程序员&a…

php的list函数

作用&#xff1a;把索引数组中的值赋给一组变量&#xff0c;像 array() 一样&#xff0c;这不是真正的函数&#xff0c;而是语言结构。 list() 可以在单次操作内就为一组变量赋值。 <?phpheader(content-type:text/html;charsetutf-8);$personarray(DL_one,18,man);list($…

我也终于有被认为是高手的时候了,^_^

昨天&#xff0c;马超打电话&#xff0c;让我回去给老同事讲安装的制作过程&#xff0c;说什么——他们不会。 汗......心想&#xff0c;当初谁教我啊?!还不都是自己学习摸索的&#xff0c;可现如今人家话说到这儿&#xff0c;也不好硬搪塞掉&#xff0c;去就去呗&…

php的range函数

range() 函数用于创建一个包含指定范围的元素的数组。 语法&#xff1a; range(low,high,step) “”“ low:起始值 high&#xff1a;最大值 step&#xff1a;步长&#xff0c;可写可不写&#xff0c;默认为1 ”“”<?phpheader(content-type:text/html;charsetutf-8);$arr…

php常量变量连接,PHP常量及变量区别原理详解

常量&#xff1a;用于储存一个不会变化也不希望变化的数据的标示符(命名规则与变量相同)定义形式&#xff1a;使用 define() 函数定义使用形式&#xff1a;define(“常量名” &#xff0c;常量值)使用 counst 语法定义使用形式&#xff1a;counst 常量名 常量值使用常量&#…

字符串最长回文子串_最长回文子串

字符串最长回文子串Problem statement: 问题陈述&#xff1a; Given a string str, find the longest palindromic substring. A substring need to be consecutive such that for any xixj i<j must be valid in the parent string too. Like "incl" is a subst…

一个人在办公室的日子

同我一起工作的那个大学同学兼同事ALICE因为个人原因,最近请假了一个星期.剩下了孤单的我在公司应付日常英文翻译书写工作。的确有点闷&#xff0c;的确有些不习惯&#xff0c;点讲&#xff0c;习惯了两个人一起吃饭聊天&#xff0c;一起拼命赶稿子&#xff0c;一起饭后散步&am…

php的array_merge函数

array_merge函数用于把一个或多个数组合并为一个数组 语法&#xff1a; array_merge(array1,array2,array3...)<?phpheader(content-type:text/html;charsetutf-8);$a1array("a">"red","b">"green");$a2array("c"…

dlf packet_DLF的完整形式是什么?

dlf packetDLF&#xff1a;德里土地和金融 (DLF: Delhi Land and Finance) DLF is an abbreviation of Delhi Land and Finance. Delhi Land and Finance is one of the leading commercial real estate developers in India. In 1946, the company was established by Chaudha…

python求三个数中最小(大)的元素

求最小&#xff1a; def getThreeNumberMin(x,y,z):minx if x<y else yminmin if min<z else zreturn min agetThreeNumberMin(3,-1,-1) print(a)结果&#xff1a; 求最大&#xff1a; def getThreeNumberMin(x,y,z):maxx if x>y else ymaxmax if max>z else zr…