เมื่อ Java ผ่านสตริง JSON และได้รับค่า KV ที่สอดคล้องกันเกิดปัญหาต่าง ๆ เช่นการออกรายการใน JSON เพื่อแปลงเป็น JSONARRAY จากนั้นแปลงวัตถุในรายการเป็นแผนที่แล้วใช้ค่า (การปฏิบัติก่อนหน้านี้) นางฟ้าผ่าน Fastjson ของอาลีบาบาคุณสามารถแปลง Str เป็น jsonarray ได้อย่างง่ายดายจากนั้นบังคับให้วัตถุในนั้นเป็น jsonobject จากนั้นรับค่าผ่าน obj.getinteger ("คีย์") และ obj.getstring ("คีย์")
jsonArray json = (jsonarray) jsonarray.parse (str); สำหรับ (object obj: json) {jsonobject jo = (jsonobject) obj; สถานะ int = jo.getInteger ("สถานะ"); ข้อความสตริง = jo.getString ("ข้อความ"); System.out.println ("สถานะ ---" + สถานะ + "--- ข้อความ ---" + ข้อความ);}1. เมื่อมีอาร์เรย์และวัตถุแผนที่ในสตริง JSON สำรวจข้อมูลและรูปแบบข้อมูลมีดังนี้:
[{"สถานะ": 0, "แท็ก": ["ตรวจสอบ: ntp"], "timestamp": 1492151922.198, "ตรวจสอบ": "datadog.agent.check_status", "host_name": "song-2", "ข้อความ": "timestamp": 1492151922.2325, "ตรวจสอบ": "datadog.agent.up", "host_name": "song-2", "ข้อความ": null, "id": 5}]เมื่อแยกวิเคราะห์ข้อมูลสตริง JSON ด้านบนหากคุณไม่ได้ใช้ FastJSON หรือ GSON วิธีการแยกวิเคราะห์มีดังนี้:
วิธีที่ 1
/** * ในรายละเอียดโฮสต์สถานะบริการแพลตฟอร์มและข้อความของข้อความแสดงข้อผิดพลาดข้อยกเว้นที่รายงานข้อผิดพลาด * @param str * @return * @throws Exception */รายการส่วนตัว <แผนที่ <String, String >> operArstr jsonarray.parse (STR); แผนที่ <สตริงวัตถุ> objmap = null; แผนที่ <สตริงสตริง> resmap = null; สำหรับ (Object obj: json) {objmap = obj2map (obj); @suppresswarnings ("ไม่ได้ตรวจสอบ") แผนที่ <สตริง, วัตถุ> mobj = (แผนที่ <สตริง, วัตถุ>) objmap.get ("แผนที่"); สถานะ int = (จำนวนเต็ม) mobj.get ("สถานะ"); if (สถานะ! = 0) {resmap = new hashmap <string, string> (); สวิตช์ (สถานะ) {กรณีที่ 1: resmap.put ("สถานะ", "คำเตือน"); หยุดพัก; กรณีที่ 2: resmap.put ("สถานะ", "ข้อผิดพลาด"); หยุดพัก; กรณีที่ 3: resmap.put ("สถานะ", "crit"); หยุดพัก; ค่าเริ่มต้น: break; } resmap.put ("serviceName", ((สตริง) mobj.get ("ตรวจสอบ")). แยก ("//.") [0]); resmap.put ("msg", (สตริง) mobj.get ("ข้อความ")); mlist.add (resmap); }} ส่งคืน mList; } / ** * วัตถุไปทำแผนที่ * @param obj * @return * @throws Exception * / แผนที่สาธารณะ <String, Object> Obj2Map (Object OBJ) โยนข้อยกเว้น {ถ้า (obj == null) {return null; } แผนที่ <string, Object> map = new hashmap <string, object> (); ฟิลด์ [] ฟิลด์ = obj.getClass (). getDeclaredFields (); สำหรับ (ฟิลด์ฟิลด์: ฟิลด์) {field.setAccessible (จริง); map.put (field.getName (), field.get (obj)); } กลับแผนที่; -วิธีที่ 2
/** * ในรายละเอียดโฮสต์สถานะบริการแพลตฟอร์มและข้อความของข้อความแสดงข้อผิดพลาดข้อยกเว้นที่รายงานข้อผิดพลาด * @param str * @return * @throws Exception */รายการส่วนตัว <แผนที่ <String, String >> operArstr jsonarray.parse (STR); แผนที่ <สตริงสตริง> resmap = null; สำหรับ (Object obj: json) {jsonobject jo = (jsonobject) obj; สถานะ int = jo.getInteger ("สถานะ"); if (สถานะ! = 0) {resmap = new hashmap <string, string> (); สวิตช์ (สถานะ) {กรณีที่ 1: resmap.put ("สถานะ", "คำเตือน"); หยุดพัก; กรณีที่ 2: resmap.put ("สถานะ", "ข้อผิดพลาด"); หยุดพัก; กรณีที่ 3: resmap.put ("สถานะ", "crit"); หยุดพัก; ค่าเริ่มต้น: break; } resmap.put ("serviceName", (jo.getString ("ตรวจสอบ")). แยก ("//.") [0]); resmap.put ("msg", jo.getString ("ข้อความ")); mlist.add (resmap); }} ส่งคืน mList; -2. เมื่ออาร์เรย์มีอาร์เรย์ในสตริง JSON จะวนซ้ำผ่านข้อมูลและรูปแบบข้อมูลมีดังนี้:
[["haproxy", "haproxy", 0, "ข้อผิดพลาด", "swdfghyjuikl", {}], ["gearmand", "gearmand", 0, "ข้อผิดพลาด", "ไม่พบการเชื่อมต่อที่ถูกต้องในรายการ:วิธีที่ 1
/** * รับข้อมูลข้อยกเว้นโดยการสอบถาม AgentCheckSStr * @param AgentChecksstr * @return */รายการส่วนตัว <แผนที่ <สตริง, สตริง >> getExceptInfoFromagentChecks (สตริง AgentChecksStr) {รายการ <แผนที่ <String, String >> สถานะและข้อความของรายงานข้อผิดพลาดข้อผิดพลาดรายงานข้อผิดพลาดวัตถุ JSONARRAY = JSONARRAY.PARSE (AgentCheckSStr); @suppresswarnings ("ไม่ได้ตรวจสอบ") รายการ <list <object>> list = (รายการ <list <object>>) jsonarray; แผนที่ <สตริงสตริง> แผนที่ = null; สำหรับ (int i = 0; i <list.size (); i ++) {map = new hashmap <string, string> (); สถานะสตริง = list.get (i) .get (3) .tostring (); if (! status.equals ("ตกลง")) {String serviceName = list.get (i) .get (0) .toString (); String msg = list.get (i) .get (4) .toString (); map.put ("serviceName", serviceName); map.put ("สถานะ", สถานะ); map.put ("msg", mlist.add (แผนที่);}} return mlist;}วิธีที่ 2
/** * รับข้อมูลข้อยกเว้นโดยการสอบถาม AgentCheckSStr * @param AgentChecksStr * @return */รายการส่วนตัว <แผนที่ <สตริง, สตริง >> getExceptInfoFromagentChecks (สตริง AgentChecksStr) {// ชื่อบริการที่เปิดใช้งาน jsonArray jsonarray = (jsonarray) jsonarray.parse (Agentchecksstr); แผนที่ <สตริงสตริง> แผนที่ = null; สำหรับ (Object obj: jsonarray) {map = new hashmap <string, string> (); jsonarray ja = (jsonarray) obj; สถานะสตริง = ja.getString (3); if (! status.equals ("ตกลง")) {String serviceName = ja.getString (0); สตริง msg = ja.getString (4); map.put ("serviceName", serviceName); map.put ("สถานะ", สถานะ); map.put ("msg", mlist.add (แผนที่);}} return mlist;}GSON แปลงสตริง JSON เป็นวัตถุ JSON:
นำเข้า com.google.gson.gson; นำเข้า com.google.gson.jsonarray; นำเข้า com.google.gson.jsonelement; นำเข้า com.google.gson.jsonobject; นำเข้า com.google.gson.jsonparser; "{/" AlarmDetails/": {/" ConditionDetails/": {/" AlarmId/": 7,/" AlarmNodatanotifyTime/": 1,/" AlarmNowSeriesWaittime/": 2},/" "ConditionStatic/": {/"AlarmId/": 7,/"Conditionaggregate/":/"avg/",/"conditionoperator/": 1,/"conditionThresholdTime/": 5,/"ConditionthresholdValue/":/"123/"},/"MetricDetails/": {/"AlarmId/": 7,/"MetricAggregater/":/"avg/",/"Metricby/":/" "host/",/"metricexcludetag/":/"โฮสต์: paas-177/",/"metricname/":/"system.cpu.user/",/"metricq/":/"avg: system.cpu.user { #address: Wuhan ,! host: paas-177} โดย {host}/",/" metrictag/":/"#ที่อยู่: Wuhan/"},/" แจ้ง/": [{/" AlarmId/": 7,/" Notifychann El/": 5,/" NotifyUserId/": 1}, {/" AlarmId/": 7,/" NotifyChannel/": 5,/" NotifyUserId/": 2}] VG (Last_5m) AVG: System.cpu.user {#Address: Wuhan ,! โฮสต์: PaAS-177} โดย {host}> 123.0/",/" AlarmId/": 7,/" AlarmLastValue/"/" UP /",/" AlarmName/":/" Static_Metric/",/" AlarmStatus/": 1,/" AlarmType/": 2,/" AlarmTypeJoin/": 3,/" CreateTime/":/" 2017-06-28-28 17: 25: 52.0/",/" createUserId/": 1,/" isdisable/": false,/" lastalarmtime/":/" 2017-06-28 17: 25: 27.0/",/" MetricName/":/" System.cpu.user/",/" Metrictag/":/"#ที่อยู่: Wuhan/",/" updateTime/":/" 2017-06-29 15: 49: 18.0/"}},/" AlarmId/": 7,/" allmark/": {/" avg: system.cpu.user {โฮสต์: cfeng-4,#ที่อยู่: Wuhan ,! โฮสต์: PAAS-177}/": {/" ChangeputTime/": true,/" lastputtsdbtime/": 1499655343,/" LastSuccessCheckTime /":1499655349,/"Series/":T "tagmap/": {/"โฮสต์/":/"cfeng-4/",/"#address/":/"wuhan/",/"! host/":/"paas-177/"}}},/"Joinkype/":/" 3,/"usemetricunit/":/"เปอร์เซ็นต์/",/"validatadetails/": {/"สถานะ/": 0,/"validatamerges/": [{/"Alarmmarkdto/": {/"contupputtime/": true,/ 655349,/"ซีรี่ส์/":/"avg: system.cpu.user {โฮสต์: cfeng-4,#ที่อยู่: Wuhan ,! โฮสต์: paas-177}/",/"tagmap /": {/" โฮสต์/":/" cfeng-4/",/"#address/":/" wuhan/",/"! host/":/" paas-177/"}},/" สถานะ/": 0,/" แท็ก/":: /"โฮสต์: cfeng-4/",/"validatanodata/": {/"currenttime/": 1499655349,/"isnodata/": false,/"lastsucc Esschecktime/": 1499655349,/" ซีรี่ส์/":/" avg: system.cpu.user {โฮสต์: cfeng-4,#ที่อยู่: Wuhan ,! โฮสต์: P AAS-177}/",/" tag/": {/" host/":/" cfeng-4/",/"#address/":/" wuhan/",/"! host/":/" paas-177/"},/" thre sholdtime/": 60},/" validatastatic/": {/" convertothResholdValue/": 123.0,/" end/": 1499655343,/" inte rvalaggregator/":/" avg/",/" isalart/": true,/" ผู้ดำเนินการ/": 1,/" ซีรีส์/":/" avg: system.cpu.user {โฮสต์ : CFENG-4,#ที่อยู่: Wuhan ,! โฮสต์: PAAS-177}/",/" start/": 1499655043,/" sysunit/":/" เปอร์เซ็นต์/",/" แท็ก/"" : {/"#address/":/"Wuhan/",/"Host/":/"Cfeng-4/",/"! Host/":/"PAAS-177/"},/"ThresholdTime/": 300,/" thresholdValue/":/" 123/",/" value/": 5.715769243240357}}}],/" ValidatatimeConds/": 1499655349}}"; สตริง jsonstr1 = "{/" AlarmDetails/": {/" ConditionDetails/": {/" AlarmId/": 7,/" AlarmNodatanotifyTime/": 1,/" AlarmNowSeriesWaittime/": 2},/" "ConditionStatic/": {/"AlarmId/": 7,/"Conditionaggregate/":/"avg/",/"conditionoperator/": 1,/"conditionThresholdTime/": 5,/"ConditionthresholdValue/":/"123/"},/"MetricDetails/": {/"AlarmId/": 7,/"MetricAggregater/":/"avg/",/"Metricby/":/" "host/",/"metricexcludetag/":/"โฮสต์: paas-177/",/"metricname/":/"system.cpu.user/",/"metricq/":/"avg: system.cpu.user { #address: Wuhan ,! host: paas-177} โดย {host}/",/" metrictag/":/"#ที่อยู่: Wuhan/"},/" แจ้ง/": [{/" AlarmId/": 7,/" Notifychann El/": 5,/" NotifyUserId/": 1}, {/" AlarmId/": 7,/" NotifyChannel/": 5,/" NotifyUserId/": 2}] VG (Last_5m) AVG: System.cpu.user {#Address: Wuhan ,! โฮสต์: PaAS-177} โดย {host}> 123.0/",/" AlarmId/": 7,/" AlarmLastValue/"/" UP /",/" AlarmName/":/" Static_Metric/",/" AlarmStatus/": 1,/" AlarmType/": 2,/" AlarmTypeJoin/": 3,/" CreateTime/":/" 2017-06-28-28 17: 25: 52.0/",/" createUserId/": 1,/" isdisable/": false,/" lastalarmtime/":/" 2017-06-28 17: 25: 27.0/",/" MetricName/":/" System.cpu.user/",/" Metrictag/":/"#ที่อยู่: Wuhan/",/" updateTime/":/" 2017-06-29 15: 49: 18.0/"}},/" AlarmId/": 7,/" allmark/": {/" avg: system.cpu.user {โฮสต์: cfeng-4,#ที่อยู่: Wuhan ,! โฮสต์: PAAS-177}/": {/" changeputTime/": true,/" lastputtsdbtime/": 1499655374,/" LastSuccessCheckTime /":1499655379,/"Series/":T "tagmap/": {/"โฮสต์/":/"cfeng-4/",/"#address/":/"wuhan/",/"! host/":/"paas-177/"}},/"jointype/":/" 3,/"usemetricunit/":/"เปอร์เซ็นต์/",/"validatadetails/": {/"สถานะ/": 0,/"validatamerges/": [{/"Alarmmarkdto/": {/"contupputtime/": true,/ 655379,/"ซีรี่ส์/":/"avg: system.cpu.user {โฮสต์: cfeng-4,#ที่อยู่: Wuhan ,! โฮสต์: paas-177}/",/"tagmap /": {/" โฮสต์/":/" cfeng-4/",/"#address/":/" wuhan/",/"! host/":/" paas-177/"}},/" สถานะ/": 0,/" แท็ก/":: /"โฮสต์: cfeng-4/",/"validatanodata/": {/"currenttime/": 1499655379,/"isnodata/": false,/"lastsucc Esschecktime/": 1499655379,/" ซีรี่ส์/":/" avg: system.cpu.user {โฮสต์: cfeng-4,#ที่อยู่: Wuhan ,! โฮสต์: P AAS-177}/",/" tag/": {/" host/":/" cfeng-4/",/"#address/":/" wuhan/",/"! host/":/" paas-177/"},/" thre sholdtime/": 60},/" validatastatic/": {/" convertothResholdValue/": 123.0,/" end/": 1499655374,/" inte rvalaggregator/":/" avg/",/" isalart/": true,/" ผู้ดำเนินการ/": 1,/" ซีรีส์/":/" avg: system.cpu.user {โฮสต์ : CFENG-4,#ที่อยู่: Wuhan ,! โฮสต์: PAAS-177}/",/" start/": 1499655074,/" sysunit/":/" เปอร์เซ็นต์/",/" แท็ก/"" : {/"#address/":/"Wuhan/",/"Host/":/"Cfeng-4/",/"! Host/":/"PAAS-177/"},/"ThresholdTime/": 300,/" thresholdValue/":/" 123/",/" value/": 5.0896408217293888888888}}],/" ValidatatimeConds/": 1499655379}}"; ตั้งค่า <string> set = new hashset <string> (); set.add (jsonstr0); set.add (JSONST1); GSON GS = new GSON (); รายการ <Object> EventList = new ArrayList <Object> (); สำหรับ (String str: set) {jsonObject returnData = new JsonParser (). parse (str) .getasjsonobject (); jsonObject ad = returndata.get ("AlarmDetails"). getasjsonObject (); jsonObject vd = returndata.get ("validatadetails"). getasjsonobject (); jsonArray vm = vd.get ("validatamerges"). getasjsonarray (); jsonArray nf = ad.get ("แจ้งเตือน"). getasjsonarray (); jsonObject v = ad.get ("ดู"). getasjsonObject (); String validatatimeseconds = vd.get ("validatatimeConds"). toString (); สำหรับ (jsonElement JE: VM) {je.getasjsonObject (). เพิ่ม ("ดู", v); je.getasjsonobject (). เพิ่ม ("แจ้งเตือน", nf); je.getasjsonObject (). addProperty ("validatatimeConds", long.parselong (validatatimeseconds)); Eventlist.add (JE); }} สำหรับ (Object OBJ: EventList) {String inparam = gs.tojson (obj); System.out.println (inparam); } system.out.println (gs.tojson (eventlist)); - // รับข้อมูลอุปกรณ์ (เฉพาะอุปกรณ์ฮาร์ดแวร์และอุปกรณ์เสมือนจริง) hashmap <สตริง, สตริง> parammap = new hashmap <string, string> (); parammap.put ("hostid", mhostid); parammap.put ("ptype", dto.getptype (); dto.getTypeflag ()); parammap.put ("api_key", apikey); string resstr = httputils.get (device_info_url, parammap); jsonobject jobj = json.parseObject (resstr); คืนค่า = jobj.get ("ผลลัพธ์"). toString (); DeviceInfodto deviceinfodto = new gson (). fromjson (rest, deviceinfodto.class); dto.setDeviceInfo (deviceInfodto);} รายการ <แผนที่ <จำนวนเต็ม, ยาว >> ผลลัพธ์ = new ArrayList <แผนที่ <จำนวนเต็ม, ยาว >> (); แผนที่ <สตริง, สตริง> timemap = null; รายการ <แผนที่ <สตริง, สตริง >> timearr = new ArrayList <แผนที่ <สตริง, สตริง >> (); สำหรับ (int j = 0; j <result.size (); j ++) {timemap = new hashmap <string, string> (); if (j == result.size () - 1) {timemap.put ("starttime", result.get (j) .get (result.get (j) .keyset (). iterator (). next ()) + ""); timemap.put ("endtime", system.currenttimeMillis () + "");} else {timemap.put ("starttime", result.get (j) .get (result.get.get (j) .keyset () timemap.put ("endtime", (result.get (j+1) .get (result.get (j+1) .keyset (). iterator (). next ()) - 1)+"");} timemap.put ("โฮสต์ชื่อ", "*"); result.get (j) .keyset (). iterator (). next (); ถ้า (key == 1) {timemap.put ("สถานะ", "info");} อื่นถ้า (key == 2) {timemap.put ("สถานะ", "ข้อผิดพลาด"); timemap.put ("สถานะ", "คำเตือน");} timearr.add (timemap);}ตัวอย่างข้างต้นของค่าสตริง Java Traversing JSON คือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น