Java、JS解析JSON对象、JSON数组

曾经终败给现在 2023-02-10 05:07 139阅读 0赞

一:三种JSON格式

基本类型

  1. {
  2. "student": "张三",
  3. "age": 18,
  4. "sex": true
  5. }

数组类型

  1. [
  2. {
  3. "student": "张三",
  4. "age": 18,
  5. "sex": true
  6. },
  7. {
  8. "student": "李四",
  9. "age": 19,
  10. "sex": false
  11. }
  12. ]

对象嵌套

  1. {
  2. "student": "张三丰",
  3. "school": {
  4. "class":"7班",
  5. "floor": "5层"
  6. },
  7. "students": [
  8. {
  9. "student": "张三",
  10. "age": 18,
  11. "sex": true
  12. },
  13. {
  14. "student": "李四",
  15. "age": 19,
  16. "sex": false
  17. }
  18. ]
  19. }

二:利用alibaba.fastjson解析JSONObject、JSONArray

在这里插入图片描述

  1. package com.test1;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. public class TestJsonArray {
  6. public static void main(String[] args) {
  7. // json字符串-简单对象型
  8. final String JSON_OBJ_STR = "{\"studentName\":\"lily\",\"studentAge\":12}";
  9. // json字符串-数组类型
  10. final String JSON_ARRAY_STR = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]";
  11. testJSONStrToJSONArray1(JSON_ARRAY_STR);
  12. testJSONStrToJSONObject(JSON_OBJ_STR);
  13. }
  14. /** * json字符串-数组类型与JSONArray之间的转换 */
  15. public static void testJSONStrToJSONArray1(String JSON_ARRAY_STR) {
  16. JSONArray jsonArray = JSON.parseArray(JSON_ARRAY_STR);
  17. // JSONArray jsonArray1 =JSONArray.parseArray(JSON_ARRAY_STR);//因为JSONArray继承了JSON,所以这样也是可以的
  18. // 遍历方式1
  19. int size = jsonArray.size();
  20. for (int i = 0; i < size; i++) {
  21. JSONObject jsonObject = jsonArray.getJSONObject(i);
  22. System.out.println(jsonObject.getString("studentName") + ":" + jsonObject.getInteger("studentAge"));
  23. }
  24. // 遍历方式2
  25. for (Object obj : jsonArray) {
  26. JSONObject jsonObject = (JSONObject) obj;
  27. System.out.println(jsonObject.getString("studentName") + ":" + jsonObject.getInteger("studentAge"));
  28. }
  29. }
  30. /** * json字符串-简单对象型与JSONObject之间的转换 */
  31. public static void testJSONStrToJSONObject(String JSON_OBJ_STR) {
  32. JSONObject jsonObject = JSON.parseObject(JSON_OBJ_STR);
  33. //JSONObject jsonObject1 = JSONObject.parseObject(JSON_OBJ_STR); //因为JSONObject继承了JSON,所以这样也是可以的
  34. System.out.println(jsonObject.getString("studentName") + ":" + jsonObject.getInteger("studentAge"));
  35. }
  36. }

三:利用json.JSONObject解析JSONObject

  1. package com.test1;
  2. import org.json.JSONException;
  3. import org.json.JSONObject;
  4. public class TestJsonObject {
  5. public static void main(String[] args) throws JSONException {
  6. //记得转义
  7. String jsonStr="{\"studentName\":\"zhangsanfeng\",\"age\":18,\"school\":\"武当山大学\"}";
  8. JSONObject jsonObj = new JSONObject(jsonStr);
  9. int age = jsonObj.getInt("age");
  10. String school = jsonObj.optString("school");
  11. String studentName= (String) jsonObj.get("studentName");
  12. System.out.println(age);
  13. System.out.println(school);
  14. System.out.println(studentName);
  15. }
  16. }

解析如下形式json数组
在这里插入图片描述

  1. JSONObject json = new JSONObject(data);
  2. JSONArray rows = json.optJSONArray("IT_QUERY");
  3. for (int i = 0; i < rows.length(); i++) {
  4. JSONObject row = rows.optJSONObject(i);
  5. //打印出WERKS字段值
  6. System.out.println(row.optString("WERKS"));
  7. }

四:将json数组后台解析分组,比如按照OrderNum

数据库中数据存储如下:
在这里插入图片描述
原始数据类型如下:

  1. [
  2. {
  3. ORDER_NUM=SD2520200522001,
  4. WERKS_DN=2050,
  5. POSNR=000010
  6. },
  7. {
  8. ORDER_NUM=SD2520200610001,
  9. WERKS_DN=2050,
  10. POSNR=000010
  11. },
  12. {
  13. ORDER_NUM=SD2520200610001,
  14. WERKS_DN=2050,
  15. POSNR=000010
  16. }
  17. ]

比如同一个单号,需要处理成如下类型json数据类型

  1. {
  2. "SD2520200611004":[
  3. {
  4. "ORDER_NUM":"SD2520200611004",
  5. "WERKS_DN":"2050",
  6. "POSNR":"000010"
  7. }],
  8. "SD2520200610001":[
  9. {
  10. "ORDER_NUM":"SD2520200610001",
  11. "WERKS_DN":"2050",
  12. "POSNR":"000010"
  13. },
  14. {
  15. "ORDER_NUM":"SD2520200610001",
  16. "WERKS_DN":"2050",
  17. "POSNR":"000010"
  18. }],
  19. "SD2520200522001":[
  20. {
  21. "ORDER_NUM":"SD2520200522001",
  22. "WERKS_DN":"2050",
  23. "POSNR":"000010"
  24. }]
  25. }

java代码如下:

  1. public void run() {
  2. // TODO Auto-generated method stub
  3. SD25TaskService sd25TaskService = applicationContext.getBean(SD25TaskService.class);
  4. try {
  5. List list = sd25TaskService.getData();//从数据库中查询出数据
  6. JSONObject obj = new JSONObject();
  7. for (int i = 0; i < list.size(); i++) {
  8. Map<String,Object> map = (Map<String, Object>) list.get(i);//遍历获取字段集合
  9. String orderNum = map.get("ORDER_NUM").toString();//按照ORDER_NUM进行区分
  10. if(!obj.containsKey(orderNum)) { //如果JSONObject不存在,则存按照<orderNum,List>形式存入JSONObject
  11. List<Map<String,Object>> tempList = new ArrayList<>();//创建临时tempList作为list存储json数据
  12. tempList.add(map);
  13. obj.put(orderNum, tempList);
  14. }else { //如果存在,则先取出放入临时list,然后将当前的map存入临时tempList
  15. List<Map<String,Object>> tempList = (List<Map<String, Object>>) obj.get(orderNum);
  16. tempList.add(map);
  17. }
  18. }
  19. System.out.println(obj);
  20. } catch (Exception ex) {
  21. LOG.error("仓管员收货自动过账提交BPM异常!", ex);
  22. }
  23. }

五:JS解析JSON对象

利用eval函数进行转换

  1. var data= {
  2. "name": "zhangsanfeng",
  3. "age": 118,
  4. "address": "beijing"
  5. };
  6. var json = eval('(' + data+ ')');
  7. console.info(json.name);
  8. console.info(json.age);
  9. console.info(json.address);

六:解析JSON数组

6.1 解析方式1
拼接json数组,如{“IT_ITEM”:[{“VBELN”:“0080001496”}]}

  1. var arry = [];
  2. var jsonArray = { };
  3. jsonArray.VBELN = "0080001496";
  4. arry.push(jsonArray);
  5. var inputTables = { };
  6. inputTables.IT_ITEM = arry;
  7. console.info(JSON.stringify(inputTables))

json数组格式如下
var data = “{“ET_INFO”:[{“VBELN”:“80001496”,“KBETR”:3.00,“POSNR”:“000010”,“ARKTX”:“受话器SDRP0615PJ02-04-056”,“WAERS”:“RMB”,“MEINS”:“PCS”,“LGMNG”:20.000,“WBSTA”:“A”,“MATNR”:“000000001400009338”,“NAME1”:“AMAZON”}]}”;

  1. {
  2. "ET_INFO": [{
  3. "VBELN": "8000149",
  4. "KBETR": 3.00,
  5. "POSNR": "000010",
  6. "ARKTX": "受话器SD",
  7. "WAERS": "RMB",
  8. "MEINS": "PCS",
  9. "LGMNG": 20.0,
  10. "WBSTA": "A",
  11. "MATNR": "00000000140",
  12. "NAME1": "AMA"
  13. }]
  14. }
  15. var arrays = $.parseJSON(data.data).ET_INFO;
  16. for(var i=0 ;i<arrays.length;i++){
  17. var POSNR = arraus[i].POSNR;//交货项目
  18. var MATNR = arraus[i].MATNR;//物料号
  19. var ARKTX = arraus[i].ARKTX;//销售订单项目短文本
  20. var MEINS = arraus[i].MEINS;//基本计量单位
  21. var LGMNG = arraus[i].LGMNG;//以仓库保管单位级的实际交货数量
  22. var KBETR = arraus[i].KBETR;//价格
  23. var WAERS = arraus[i].WAERS;//货币码
  24. var WBSTA = arraus[i].WBSTA;//货物移动状态
  25. var NAME1 = arraus[i].NAME1;//名称
  26. }

6.2 解析方式2

  1. var array = [{
  2. "name": "zhangsanfeng",
  3. "age": 118,
  4. "address": "beijing"
  5. }, {
  6. "name": "lisiguang",
  7. "age": 119,
  8. "address": "shanghai"
  9. }, {
  10. "name": "wangwuha",
  11. "age": 117,
  12. "address": "hangzhou"
  13. }];
  14. for (var i in array ) {
  15. console.info(array[i].name);
  16. console.info(array[i].age);
  17. console.info(array[i].address);
  18. }

七:JSON与Map互相转换

  1. package com.gzsolartech.bpmportal.util;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Set;
  8. import org.directwebremoting.json.types.JsonObject;
  9. import org.json.JSONArray;
  10. import org.json.JSONObject;
  11. public class JsonMapUtil {
  12. public static Map convertJsonObjectToMap(JSONObject json){
  13. Map returnMap = new HashMap();
  14. Iterator<String> iterator = json.keys();
  15. while(iterator.hasNext()){
  16. String key = iterator.next();
  17. returnMap.put(key, json.opt(key));
  18. }
  19. return returnMap;
  20. }
  21. public static JSONObject convertMapToJsonObject(Map<String,Object> map){
  22. JSONObject json = new JSONObject();
  23. Set<String> set = map.keySet();
  24. Iterator<String> iterator = set.iterator();
  25. while(iterator.hasNext()){
  26. String key = iterator.next();
  27. json.put(key, map.get(key));
  28. }
  29. return json;
  30. }
  31. public static List<Map> convertJsonArrayToMap(JSONArray jsonArr){
  32. Map returnMap = new HashMap();
  33. List<Map> list = new ArrayList<>();
  34. for(int i=0;i<jsonArr.length();i++){
  35. JSONObject json = jsonArr.optJSONObject(i);
  36. Map map = convertJsonObjectToMap(json);
  37. list.add(map);
  38. }
  39. return list;
  40. }
  41. }

参考文章
https://blog.csdn.net/dirft\_din/article/details/108325419
https://www.yiibai.com/html/json/2013/0906249.html

发表评论

表情:
评论列表 (有 0 条评论,139人围观)

还没有评论,来说两句吧...

相关阅读