如何解析字段名称不确定的json字符串

问题如下

  下面是一个json字符串,有其他系统提交过来的,当前需要对该json字符串进行解析,需要注意的是,外层的key是不确定的(随机的字符串),但是内层的value字段名称和类型都可以确定。

{
    "fa490c67-bdb2-4ddd-810d-894e9ceeba0e":{
        "top":191,
        "left":55,
        "process_to":[
            "bd7c788d-9d2f-48da-80ad-726edb8dffb1"
        ]
    },
    "bd7c788d-9d2f-48da-80ad-726edb8dffb1":{
        "top":171,
        "left":281,
        "process_to":[

        ]
    }
}

  

解析方案

package cn.ganlixin.test;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
import org.junit.Test;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class JsonUtilsTest {

    @Test
    public void test() throws JsonProcessingException {
        String s = "{\"fa490c67-bdb2-4ddd-810d-894e9ceeba0e\":{\"top\":191,\"left\":55,\"process_to\":[\"bd7c788d-9d2f-48da-80ad-726edb8dffb1\"]},\"bd7c788d-9d2f-48da-80ad-726edb8dffb1\":{\"top\":171,\"left\":281,\"process_to\":[]}}";

        ObjectMapper objectMapper = new ObjectMapper();
        final JsonNode jsonNode = objectMapper.readTree(s);

        // 进行迭代
        final Iterator<Map.Entry<String, JsonNode>> fields = jsonNode.fields();
        fields.forEachRemaining(item -> {
            MyOutEntity myOutEntity = new MyOutEntity();
            myOutEntity.setKey(item.getKey());
            try {
                MyInnerEntity myInnerEntity = objectMapper.readValue(item.getValue().toString(), MyInnerEntity.class);
                myOutEntity.setMyInnerEntity(myInnerEntity);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }

            // 打印解析完的一个对象
            System.out.println(myOutEntity);
        });

        // JsonUtilsTest.MyOutEntity(key=fa490c67-bdb2-4ddd-810d-894e9ceeba0e, myInnerEntity=JsonUtilsTest.MyInnerEntity(top=191, left=55, process_to=[bd7c788d-9d2f-48da-80ad-726edb8dffb1]))
        //JsonUtilsTest.MyOutEntity(key=bd7c788d-9d2f-48da-80ad-726edb8dffb1, myInnerEntity=JsonUtilsTest.MyInnerEntity(top=171, left=281, process_to=[]))
    }

    @Data
    private static class MyOutEntity {
        private String key;
        private MyInnerEntity myInnerEntity;
    }

    @Data
    private static class MyInnerEntity {
        private Integer top;
        private Integer left;
        private List<String> process_to;
    }
}

  

  

原文地址:https://www.cnblogs.com/-beyond/p/12670492.html

时间: 2024-08-04 08:28:03

如何解析字段名称不确定的json字符串的相关文章

Oracle使用游标查询指定数据表的所有字段名称组合而成的字符串

应用场合:参考网上查询数据表的所有字段名代码,使用游标生成指定单个表的所有字段名跟逗号组成的用于select  逗号隔开的字段名列表 from字符串等场合. 查询结果输出如下: 当前数据表TB_UD_USER的字段列表字符串为AH,BIRTHPLACE,BM,CELLPHONE,CJGZRQ,DEPARTMENT2,DJJID,GZCX,GZKH,GZSFZH,HJDZ,HYZK,ID,JHRQ,JTZZ,LAFX_LD,LJDZ,LLY,LXDH,NAME,NXDH,POLICENUMBER,

objective-c和java下解析对象类型和数组类型JSON字符串

首先讲objective-c如何实现: 这里需要用到2个插件,一个是JSONKit,另一个是Jastor,一共包含6个文件,3个.h头文件和3个.m实现文件.在ARC的工程中如何导入不支持ARC的第三方工具请看这篇文章:iOS在支持arc的工程中,导入不支持arc的第三方的插件 具体文件在网上都比较好找,自己去下载即可. NSObject类型的json字符串转换为对象 大体的思路是这样,首先将json字符串先转化成NSDictionary,然后再通过参数是NSDictionary的初始化方法来生

jquery字符串数组转json字符串 C#json字符串转字符串list

一.jquery字符串数组转json字符串 var str=['1','2','3']; var jsonText= JSON.stringify(str);//把一个对象转换成json字符串 str=JSON.parse(jsonText);//把一个json字符串解析成对象 二. C#json字符串转字符串list using System.Web.Script.Serialization; JavaScriptSerializer js = new JavaScriptSerializer

Newtonsoft.Json高级用法 1.忽略某些属性 2.默认值的处理 3.空值的处理 4.支持非公共成员 5.日期处理 6.自定义序列化的字段名称

手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数据,经过分析一个简单的列表接口每一行数据返回了16个字段,但是手机APP端只用到了其中7个字段,剩余9个字段的数据全部都是多余的,如果接口返回数据为40K大小,也就是说大约20K的数据为无效数据,3G网络下20K下载差不多需要1s,不返回无效数据至少可以节约1s的时间,大大提高用户体验.本篇将为大家

Logstash 解析Json字符串,删除json嵌套字段

一.场景:此文以一个简单的json字符串文件为例,描述如何用logstash解析嵌套的json,并删除其中的某些字段 我们在linux中test.json的内容如下: {"timestamp":"2018-08-02T14:42:50.084467+0800","flow_id":364959073190719,"in_iface":"eth1","event_type":"a

java多种方式解析json字符串

第一种:用net.sf.json硬解.缺点:要求字段名称和json字符串中的字段名一样,字段命名会违反驼峰规则,也不利于拓展: JSONArray jsonArray = JSONArray.fromObject(str);  JSONObject jObj = jsonArray.getJSONObject(0);  User user= (User)jObj.toBean(jObj,User.class); 第二种:用Gson解析json字符串.优点:写法简单,字段名称只要使用@Serial

如何解析json字符串及返回json数据到前端

前言:最近需要实现的任务是:写若干个接口,并且接口中的请求数据是json格式,然后按照请求参数读取前端提前整理好的json数据,并且将json数据返回到服务器端. 主要的工具:Gson  2.8.2 项目支撑:springboot maven 0.前导--了解一下基本的json语法 JSON是一种类似 XML的语言,是用了存储和交换文本信息的语法.它的全称为JavaScript Object Notation(JavaScript 对象表示法).与xml对比,它更小.更快,更易解析. 想要更好的

JS的全局函数eval解析JSON字符串函数

JavaScript eval() 函数 定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法 eval(string) 参数 描述 string 必需.要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句. 返回值 通过计算 string 得到的值(如果有的话). 说明 该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回.因此请不要为 eval() 函数传递 String

C#解析JSON字符串总结

JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]:这种方式是使用开源的类库Newtonsoft.Json(下载地址http://json.codeplex.com/).下载后添加dll引用就能用. 首先添加引用:using Newtonsoft.Json; 新增:本地dll下载:Newtonsoft.Json.rar   引用:using Newt