当存在要解析未知key的json数据时,我们就需要一个递归方法来实现解析操作。
1、定义一个json字符串。
var data = "{name:'尼古拉斯赵四',sex:'男',age:40,birth:{year:1978,month:5,day:21},test:[{'url':'www.baicu.com'},{'url':'www.tmall.com'},{'url':'www.taobao.com'}]}";
2、定义判断对象是不是json对象的函数和是不是数组的函数
function isJson(obj){
var isjson = typeof(obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length;
return isjson;
function isArrayFn(o) {
return Object.prototype.toString.call(o) === '[object Array]';
3、递归函数
递归函数有三个要素:
① 一定有一种可以退出程序的情况;
② 总是在尝试将一个问题化简到更小的规模
③ 父问题与子问题不能有重叠的部分
function stack(obj){
if(!isJson(obj)){
return obj;
for(var o in obj){
if(stack(obj[o])){
if(isArrayFn(obj[o])){
var arr = obj[o];
for(var i = 0;i < arr.length;i++){
stack(arr[i]);
}else{
console.info(o+":"+obj[o]);
4、当文档加载时调用的递归函数函数
window.onload = function(){
stack(eval('('+data+')'));
5、效果:
![这里写图片描述](https://img-blog.csdn.net/2018052717054029?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0VzY19UYWJfRW5k/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
yarn add deep-parse-json
const { deepParseJson } = require('deep-parse-json')
const stringified = '{"personList":"[{\\"name\\":\\"siba\\"},{\\"name\\":\\"bhaskar\\"}]"}'
console.log(deepParseJson(stringified))
// { personList: [ { name: 'siba' }, { name: 'bhaskar' } ] }
解析不知道层数的JSON
通过递归的方式进行解析,将嵌套的JSON数据解析为只有一层的大JSON
注意:数据里面不能有重复的 数据,或者可以再else里面做一个判断,如果json里面有了,则做出对应的处理,手动改key或者抛弃。
// data 需要解析的数据, result解析后数据放入该json里面
public JSONObject analysisJSON(JSONObject data,JSONObject result){
Set<String>parentKey = data.k
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> <link rel="stylesheet" href="../Public/css/bootstrap.css"/> <script src="../P...
平时做项目时,我们经常会遇到需要遍历json对象的情况,如果是知道层级的话还好搞一点,如果层级是没办法固定的话就不能用一般的遍历方法了,然后我今天使用到了递归,考虑到以后也可能会经常用到所以记录一下,使用后感觉用好了的话对各种动态操作还是很有帮助的;
有的时候我们需要解析未知的json。或者说是动态的json。那么我们并不知道key具体是多少,或者说key不是固定的。这时候就需要解析动态key的方法。
这个方法是我在实现解析前台传入的json时所需要的。因为每个界面的前台传的是json是不固定的。如果真对每一个页面所传的数据都单独进行一次解析,那么太麻烦了。所以需要一个通用的解析方式。将其解析到map中。那么只需要调用该方法,就能获取到前台所...
/*** JSONObject解析方法(可以解析任意层json,采用递归解析的方法)* @param objJson* @param menu 父菜单实体类* @param list List集合* @return*/@SuppressWarnings("rawtypes")public static List analysisJson(Object objJson,Menu menu,List ...
点击上方蓝字关注我["obj1":{"attr": "xxx","childs" : ["obj2":{"attr":"xxx","childs" : null}, "obj3" : { "attr" : "xxx", "childs" : null ...
//解析策略,有可能是解析json字符串,有可能为数据中的图片地址,email等package cc.util.regex;public enum RegexPolicy {Json("Json"),Image("ImageFromHtml");private String value;RegexPolicy (String value) {this.value = value;}@Overrid...
一、建立递归树的实体类public class Tree implements Serializable {/****/private static final long serialVersionUID = 2944880335559089140L;private String key;//节点keyprivate String title;//节点名称private String parent...