【fastJson】java 使用fastjson修改多层嵌套的Objectjson数据

一、前言

今天遇到一个需求,使用的是alibaba-fastjson,操作是拿到多层嵌套json数据后,修改对应key的值,然后重新存入到json当中。

二、准备

json的数据格式如下:

我们要拿出 temp_realtime_features_monitor_log_39200 -> settings -> index -> number_of_shards的值,然后更新修改,并重新存入到json中。

{
	"temp_realtime_features_monitor_log_39200": {
		"settings": {
			"index": {
				"lifecycle": {
					"name": "hot_ilm_360"
				},
				"search": {
					"slowlog": {
						"level": "trace",
						"threshold": {
							"fetch": {
								"warn": "5s",
								"trace": "500ms",
								"debug": "800ms",
								"info": "1s"
							},
							"query": {
								"warn": "10s",
								"trace": "500ms",
								"debug": "2s",
								"info": "5s"
							}
						}
					}
				},
				"refresh_interval": "15s",
				"indexing": {
					"slowlog": {
						"source": "3000"
					}
				},
				"number_of_shards": "5",
				"number_of_replicas": "1"
			}
		},
		"mappings": {
			"properties": {
				"fname": {
					"type": "keyword"
				},
				"fvalue": {
					"type": "float"
				},
				"create_time": {
					"type": "date"
				},
				"resource_id": {
					"type": "keyword"
				},
				"logid": {
					"type": "keyword"
				}
			}
		},
		"aliases": {
			"realtime_features_monitor_log": {}
		},
		"index_patterns": ["realtime_features_monitor_log*"],
		"order": 1
	}
}

三、实施

其实思路是很简单的,我看网上都是一层一层取出来,然后在put进去,我们这个不需要,直接get到我们想要修改的那一层,然后fluentPut 即可。

jsonObject.getJSONObject("temp_realtime_features_monitor_log_39200")
                .getJSONObject(Constants.SETTINGS)
                .getJSONObject(Constants.INDEX).fluentPut(Constants.NUMBER_OF_SHARDS, "1");

System.out.println(jsonObject);

到此,就完成了,看到网上相关的文章感觉都比较繁琐,我这里整理并记录一下。

posted @ 2022-11-10 19:25  彬在俊  阅读(768)  评论(0编辑  收藏  举报