需要处理、获取无法确定的数据结构中,字段信息。麻烦大神来给点建议

Remember__Peng 2019-09-12 11:19:40
// 有可能是这样的:
// "testIndex": { 【Index】
// "mappings": {
// "testType": { 【Type】
// "properties": {
// "testField": { 【Field字段名】
// "type": "object" 【字段类型】
// }
// }
// }
// }
// }
//也有可能是这样的:
// "testIndex": { 【Index】
// "mappings": {
// "testType": { 【Type】
// "properties": {
// "testField": { 【Field字段名】
// "properties": {
// "appprogramname": { 【嵌套的Field字段名】
// "type": "text", 【字段类型】
// "fields": { 【再嵌套的Field字段名】
// "keyword": { 【再再嵌套的Field字段名】
// "type": "keyword", 【字段类型】
// "ignore_above": 256 【字段长度】
// }
// }
// }
// }
//以上是两个例子,或者也有可能会有嵌套的更深。。。因为【无法确定】使用者,存字段的数据结构是怎样的。
//根据需求,需要拿到这样的字段信息(例):testField.appprogramname.fields.keyword
如何处理。。。我准备使用死循环进行判断,如果能强转MAP,就证明当前获取到的KEY的值又是一个MAP。。。
如果不能强转MAP,就证明当前获取到的KEY的值,不是一个MAP,而是一个String字符串。。。
但是这样写,对系统的性能消耗非常的大!!!有没有更好一点的办法呢???麻烦了。。
...全文
123 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Remember__Peng 2019-12-17
  • 打赏
  • 举报
回复
今天才刚想到自己还有一个帖子没结。。。我自己解决了 由于无法确定使用该平台的操作人员,之前在ElasticSearch中录入的数据结构信息、字段信息是什么样的。 但有一点确定的是,ES返回的信息必然是JSON格式,所以使用无限循环去“探索”其结构。 无法强转就证明,一步到胃了。 贴个代码: public int forGetMap(Object object, String objectStr) { AtomicInteger integer = new AtomicInteger(); for (;;){ try { Map<String, Object> objectMap = (Map)object; Set<Map.Entry<String, Object>> entries = objectMap.entrySet(); entries.forEach(x -> { //应该在这里进行获取字段信息 list.add((objectStr + "." + x.getKey())); //这里又进行了一次自己调用自己的方法。看起来有点危险哦,不过控制住就好了 integer.set(this.forGetMap(x.getValue(), (objectStr + "." + x.getKey()))); }); //如果可以强转MAP,统计当前字段可以强转几次Map return integer.get(); }catch (Exception e){ //否则就是强制类型转换异常,代表不可以转MAP break; } } return integer.get(); }
Remember__Peng 2019-09-13
  • 打赏
  • 举报
回复
有可能会有多个对象,问题就在于,每一个JSON中,有可能结构相同,也有可能不同,并且你无法确定这个JSON中的字段信息长什么样子
冬~歌 2019-09-12
  • 打赏
  • 举报
回复
你说的是一个对象还是多个对象,如果是一个对象,直接解析字符串,从最外围开始,遇到就加到对象中,最后直接获取值就可以了; 如果是多个对象,先想清楚一个是如何处理的,递归即可。直接解析字符串应该是最快的方法了

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧