Json文件例子:

 {
"type": "Update",
"data": {
"temp": "v",
"Name": "tttt",
"Id": 5,
"template": {
"head": {
"headtext": " "
},
"body": {
"bodytext": {
"1": "123456789"
},
"image": {
"2": 169000
}
},
"tag": {
"1": {
"image": {
"normal": 179000
},
"back": {
"normal": 180000
},
"state": true
}
}
}
}
}

代码:

 package com.test.java;

 import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator; import org.json.JSONException;
import org.json.JSONObject; public class FindKeyInJson { static String stringInJSON = null; public static void main(String[] args) { File jsonFile = new File(
"D:\\jsonexample.txt");
StringBuffer sb = new StringBuffer();
try (BufferedReader br = new BufferedReader(new FileReader(jsonFile))) {
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} try {
System.out.println(sb.toString());
JSONObject jo = new JSONObject(sb.toString());
String content = getKeyString(jo, "bodytext");//获取bodytext字段信息
System.out.println(content);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public static String getKeyString(JSONObject json, String key) {
HashSet<String> hSet = new HashSet<String>(); if (json.has(key)) {
// 在当前的层次中存在指定的key,可以直接获取指定key对应的string
try {
stringInJSON = json.get(key).toString();
} catch (JSONException e) {
e.printStackTrace();
}
} else {
// 在当前的层次中不存在指定的key,需要往下一个层次查找
hSet = getKeySetOnJSON(json);// 获取当前层次的所有key
Iterator<String> iterator = hSet.iterator();
while (iterator.hasNext()) {
String i = iterator.next();
if (isJSONObject(json, i)) {
try {
JSONObject tp = (JSONObject) json.get(i);
HashSet<String> hSet2 = new HashSet<String>();
hSet2 = getKeySetOnJSON(tp);
if (tp.has(key)) {
stringInJSON = tp.get(key).toString();
break;
} else {
getKeyString(tp, key);// 开始递归
} } catch (JSONException e) { e.printStackTrace();
}
}
}
}
return stringInJSON;
} public static HashSet<String> getKeySetOnJSON(JSONObject json) {
HashSet<String> hSet = new HashSet<String>();
Iterator<String> iterator = json.keys();
while (iterator.hasNext()) {
String i = iterator.next();
hSet.add(i);
}
return hSet;
} public static boolean isJSONObject(JSONObject json, String key) {
boolean flag = false;
try {
try {
JSONObject tp = (JSONObject) json.get(key);
System.out.println(key + " is JSON Object");
flag = true;
} catch (JSONException e) {
e.printStackTrace();
}
} catch (ClassCastException e) {
System.out.println(key + " is not JSON Object");
}
return flag;
} }

result:

 {    "type": "Update",    "data": {        "temp": "v",        "Name": "tttt",        "Id": 5,        "template": {            "head": {                "headtext": "  "            },            "body": {                "bodytext": {                    "1": "123456789"                },                "image": {                    "2": 169000                }            },            "tag": {                "1": {                    "image": {                        "normal": 179000                    },                    "back": {                        "normal": 180000                    },                    "state": true                }            }        }    }}
data is JSON Object
template is JSON Object
head is JSON Object
headtext is not JSON Object
tag is JSON Object
1 is JSON Object
image is JSON Object
normal is not JSON Object
back is JSON Object
normal is not JSON Object
state is not JSON Object
body is JSON Object
temp is not JSON Object
Id is not JSON Object
Name is not JSON Object
type is not JSON Object
{"1":"123456789"} //最终结果

用递归方式在JSON中查找对象的更多相关文章

  1. Java如何从数组中查找对象元素?

    在Java中,如何从数组中查找对象元素? 示例 以下示例使用Contains方法来搜索数组中的String对象. package com.yiibai; import java.util.*; pub ...

  2. spring mvc各种常见类型参数绑定方式以及json字符串绑定对象

    在使用spring mvc作为框架的时候,为了规范,我们通常希望客户端的请求参数符合规范直接通过DTO的方式从客户端提交到服务端,以便保持规范的一致性,除了很简单的情况使用RequestParam映射 ...

  3. EasyUI Tree递归方式获取JSON

    最近需要用到EASYUI中的TREE功能,以前我是直接拼接成<UL><LI>发现这样拼完之后在更改树后对树的刷新不是很理想,现改用JSON格式,首先分析TREE中JOSN格式如 ...

  4. json中$ref对象重复引用问题

    FastJson提供了SerializerFeature.DisableCircularReferenceDetect这个序列化选项,用来关闭引用检测.关闭引用检测后,重复引用对象时就不会被$ref代 ...

  5. es6中的find filter 在数组中查找对象

    数组的方法find和filter var aa=[{id:1,name:'张三'},{id:2,name:'李四'},{id:3,name:'王五'},{id:2,name:'赵六'}] aa.fin ...

  6. kbmmw 中JSON 中使用SQL 查询

    前面讲到了kbmmw 的JSON 对象操作,如何快速的查找JSON 中的值? 一种办法就是通过遍历的方法,其实在kbmmw 还有一种灵活的查询方式, 就是通过SQL 方式查询JSON 中的值.也就是说 ...

  7. WPF教程九:理解WPF中的对象资源

    在WPF中,所有继承自FrameworkElement的元素都包含一个Resources属性,这个属性就是我们这篇要讲的资源. 这一篇讲解的资源是不是上一篇的程序集资源(那个是在编译过程中打包到程序集 ...

  8. EF封装类 增加版,增加从缓存中查找数据方法,供参考!

    EF封装类 增加版,增加从缓存中查找数据方法,供参考! 这个类是抽象类,我这里增加了需要子类验证的方法ValidateEntity,方便扩展,若想直接使用该类,可以将该类更改成静态类,里面所有的方法都 ...

  9. SQL Server中CTE的另一种递归方式-从底层向上递归

        SQL Server中的公共表表达式(Common Table Expression,CTE)提供了一种便利的方式使得我们进行递归查询.所谓递归查询方便对某个表进行不断的递归从而更加容易的获得 ...

随机推荐

  1. Linux 中权限控制实例

    前言 前文对 Linux 中的权限进行了较为透彻的分析.而本文,则在前文的基础上,具体说明如何在代码中进行权限控制. 下面的代码涉及到以下几个方面: 1. 创建文件时设置文件权限 2. 修改文件的默认 ...

  2. EasyDarwin开源流媒体音视频云平台遇到的奇葩问题:内网运行正常,公网流媒体不通

    最近在帮助EasyDarwin的用户部署EasyNVR+EasyDarwin云平台+EasyClient方案的过程中,遇到一个问题,EasyNVR分布在用户各地区现场的内网中,EasyDarwin云平 ...

  3. scrollify 全屏滚动插件

    使用 1.引入文件 <script src="js/jquery.min.js"> </script> <script src="js/jq ...

  4. 8.JS数据类型

    ① 数据类型:字符串,数字,布尔,数组,对象,Null,Undefined ② JavaScript拥有动态类型.这意味着相同的变量可用作不同的类型: 实例 var x:   //x为undefine ...

  5. ABAP 日期栏函数

    在SZC这个中有很多日期函数可以研究借鉴   ABAP - 日期格式转换 现在提供以下一些日期格式转换的函数: Below are several FMs which can be used to c ...

  6. Oracle序列更新为主键最大值

    我们在使用 Oracle 数据库的时候,有时候会选择使用自增序列作为主键.但是在开发过程中往往会遇到一些不规范的操作,导致表的主键值不是使用序列插入的.这样在数据移植的时候就会出现各种各样的问题.当然 ...

  7. CSS3学习笔记(4)—上下滑动展开的按钮

    最近写了一个动画,下面来看看我以前写的一个上下滑动展开的按钮效果: 这类的效果经常会在一些网站页面下载按钮处看到,当你鼠标悬浮在下载按钮时,会提醒你是否已注册,或者点击登录什么的小提示~~~~~ 一. ...

  8. RobotFramework教程使用笔记——Selenium2Library库

    selenium之前已经学习介绍过了,它是一个支持多语言.多平台.多浏览器的web自动化测试框架,在robotframework中也可以导入selenium库来进行web自动化测试.它使用seleni ...

  9. PYTHON 爬虫笔记一:爬虫基本原理梳理

    知识点一:爬虫的基本原理梳理 一.什么是爬虫? 请求网站并提取数据的自动化程序 二.爬虫的基本流程 1:向服务器发起请求 通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的 ...

  10. 在一个form表单中根据不同按钮实现多个action事件

    <form id="writeForm" method="post"> <div class="write-btn-tj" ...