好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java 如何解析key为动态的json操作

遇到了这样的json串:

?

1

2

3

4

5

6

7

8

"panel" : {

     "8" : {

       "112" : 1

     },

     "11" : {

       "147" : 2

     }

   }

遍历获取Key和Value

?

1

2

3

4

LinkedHashMap<String, String> jsonMap = JSON.parseObject(jsonStr, new TypeReference<LinkedHashMap<String, String>>(){});

for (Map.Entry<String, String> entry : jsonMap.entrySet()) {

   System.out.println(entry.getKey() + ":" + entry.getValue());

}

补充:Java利用反射动态获取参数并进行操作实例,实现动态获取实体类解析JSON

今天看到程序里面有大量数据都是使用的JSON传输,解析重复代码太多了,然后重构了解析JSON的方式,利用反射机制把解析的方式封装了一下,我这是使用的FastJson,使用其他JSON的自己改一下就可以了

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

import java.lang.reflect.Constructor;

import java.lang.reflect.Field;

import java.lang.reflect.InvocationTargetException;

import java.util.Map.Entry;

import com.alibaba.fastjson.JSONObject;

import com.zwsd.project.system.user.domain.User;

 

/**

  * 字符串工具类

  *

  * @author wangchl

  */

public class JsonUtils {

 

     /**

      * 获取参数不为空值

      *

      * @param  method实体类     text:JSON字符串

      * @return obj 返回值

      */

     public static <T> Object Analysis(String method, String text) throws      

   ClassNotFoundException {

         Class<?> p = Class.forName(method);

         JSONObject jsonArray = JSONObject.parseObject(text);

 

         try {

             Constructor con = p.getConstructor();

             Object obj = con.newInstance();

             // 获取私有成员变量,并对它进行赋值

             for (Entry<String, Object> entry : jsonArray.entrySet()) {

 

                 try {

           //设置Key

                     Field newname = p.getDeclaredField(entry.getKey());

                     // 取消私有成员变量语言访问检查public void setAccessible(boolean flag)

                     newname.setAccessible( true );

           //value值为空不做任何操作

                     if (!entry.getValue().equals( "" )) {

                         newname.set(obj, entry.getValue());

                     }

                 } catch (NoSuchFieldException e) {

                     // 解析JSON时实体类中没有Key中的字段时会出现异常,忽略,不做任何处理

                 }

             }

             return obj;

            

         } catch (NoSuchMethodException e1) {

             e1.printStackTrace();

         } catch (SecurityException e1) {

             e1.printStackTrace();

         } catch (InstantiationException e1) {

             e1.printStackTrace();

         } catch (IllegalAccessException e1) {

             e1.printStackTrace();

         } catch (IllegalArgumentException e1) {

             e1.printStackTrace();

         } catch (InvocationTargetException e1) {

             e1.printStackTrace();

         }

         return null ;

     }

     /**

      *

      *使用方式

      *

      */

     public static void main(String[] args) {

         try {

             String text = "

       {\ "flag\":\"0\",\"token\":\"0b4b2ef3fed24c99b10c4fca65a09632\"}" ;

             User user= (User) JsonUtils.Analysis(User. class .getName(), text);

         } catch (ClassNotFoundException e) {

             e.printStackTrace();

         }

     } ///

}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://blog.csdn.net/qq_31939617/article/details/94439668

查看更多关于Java 如何解析key为动态的json操作的详细内容...

  阅读:25次