JSON字符串在Java和JavaScript中的解析和转换

痛定思痛。 2023-03-13 02:23 81阅读 0赞

JSON字符串在Java和JS种的转换

        1. JSON字符串格式
        1. JSON 在 Java 中的转换
        • 2.1 FastJSON 使用
        • 2.2 Jackson 使用
        • 2.3 Gson 使用
        • 2.4 三种工具性能对比
        1. JSON 在 JavaScript 中的转换

JSON字符串在线格式化工具:JSON在线格式化

1. JSON字符串格式

同步请求中,数据从后台到前端,需要将数据对象存储在 域对象 中;
异步请求中,数据从后台到前端,需要将数据对象转换为 JSON 字符串
根据 JavaBean 对象生成对应的 JSON 字符串。

  1. // 1个值
  2. { "键1":值1, "键2":值2}
  3. // 1组值
  4. [{ "键1":值1, "键2":值2}, { "键1":值1, "键2":值2}]

2. JSON 在 Java 中的转换

2.1 FastJSON 使用

依赖 jar 包:

  • fastjson-1.2.62.jar

将JavaBean序列化为JSON文本:
public static final String toJSONString(Object object);
把JSON文本解析为JavaBean:
public static final T parseObject(String text, Class clazz);

  1. class User {
  2. private String username;
  3. private String password;
  4. /* 构造、get、set */
  5. }
  6. /** * java对象转 json字符串 */
  7. @Test
  8. public void objectTOJson(){
  9. //简单java类转json字符串
  10. User user = new User("dmego", "123456");
  11. String UserJson = JSON.toJSONString(user);
  12. System.out.println("简单java类转json字符串:"+UserJson);
  13. //List<Object>转json字符串
  14. User user1 = new User("zhangsan", "123123");
  15. User user2 = new User("lisi", "321321");
  16. List<User> users = new ArrayList<User>();
  17. users.add(user1);
  18. users.add(user2);
  19. String ListUserJson = JSON.toJSONString(users);
  20. System.out.println("List<Object>转json字符串:"+ListUserJson);
  21. //复杂java类转json字符串
  22. UserGroup userGroup = new UserGroup("userGroup", users);
  23. String userGroupJson = JSON.toJSONString(userGroup);
  24. System.out.println("复杂java类转json字符串:"+userGroupJson);
  25. }
  26. /** * json字符串转java对象 * 注:字符串中使用双引号需要转义 (" --> \"),这里使用的是单引号 */
  27. @Test
  28. public void JsonTOObject(){
  29. /* json字符串转简单java对象 * 字符串:{"password":"123456","username":"dmego"}*/
  30. String jsonStr1 = "{'password':'123456','username':'dmego'}";
  31. User user = JSON.parseObject(jsonStr1, User.class);
  32. System.out.println("json字符串转简单java对象:"+user.toString());
  33. /* * json字符串转List<Object>对象 * 字符串:[{"password":"123123","username":"zhangsan"},{"password":"321321","username":"lisi"}] */
  34. String jsonStr2 = "[{'password':'123123','username':'zhangsan'},{'password':'321321','username':'lisi'}]";
  35. List<User> users = JSON.parseArray(jsonStr2, User.class);
  36. System.out.println("json字符串转List<Object>对象:"+users.toString());
  37. /*json字符串转复杂java对象 * 字符串:{"name":"userGroup","users":[{"password":"123123","username":"zhangsan"},{"password":"321321","username":"lisi"}]} * */
  38. String jsonStr3 = "{'name':'userGroup','users':[{'password':'123123','username':'zhangsan'},{'password':'321321','username':'lisi'}]}";
  39. UserGroup userGroup = JSON.parseObject(jsonStr3, UserGroup.class);
  40. System.out.println("json字符串转复杂java对象:"+userGroup);
  41. }

2.2 Jackson 使用

依赖 jar 包:

  • jackson-annotations-2.9.9.jar
  • jackson-core-2.9.9.jar
  • jackson-databind-2.9.9.jar

将JavaBean序列化为JSON文本:
public String writeValueAsString(Object value) throws JsonProcessingException;
把JSON文本解析为JavaBean:
public T readValue(String content, Class valueType) throws JsonParseException;

  1. class Province {
  2. private Integer pId;
  3. private String pName;
  4. private List<City> cityList;
  5. /* 构造、get、set */
  6. }
  7. public class TestJackson {
  8. public static void main(String[] args) throws Exception {
  9. Province p1 = new Province(1, "河南省");
  10. List<City> cityList = new ArrayList<>();
  11. cityList.add(new City(11, "郑州市"));
  12. cityList.add(new City(11, "洛阳市"));
  13. cityList.add(new City(11, "开封市"));
  14. p1.setCityList(cityList);
  15. // java对象 >> json字符串
  16. ObjectMapper objectMapper = new ObjectMapper();
  17. String json1 = objectMapper.writeValueAsString(p1); // 可转对象/list/map
  18. System.out.println(json1);
  19. // 将json字符串转换为java对象
  20. Province province = objectMapper.readValue(jsonP1, Province.class);
  21. List list = objectMapper.readValue(jsonList, List.class);
  22. Map map = objectMapper.readValue(jsonMap, Map.class);
  23. }
  24. }

2.3 Gson 使用

依赖 jar 包:

  • gson-2.8.5.jar

将JavaBean序列化为JSON文本:
public String toJson(Object src);
把JSON文本解析为JavaBean:
public T fromJson(String json, Class classOfT) throws JsonSyntaxException;

  1. // 生成JSON
  2. Gson gson = new Gson();
  3. User user = new User("张三",24);
  4. String jsonObject = gson.toJson(user); // {"name":"张三kidou","age":24}
  5. // 解析JSON
  6. Gson gson = new Gson();
  7. String jsonString = "{\"name\":\"张三\",\"age\":24}";
  8. User user = gson.fromJson(jsonString, User.class);

2.4 三种工具性能对比

三种工具均可转换:

  • FastJSON
  • Jackson
  • Gson

【总结】

  1. Java对象JSON序列化
    Jackson速度最快,在测试中比Gson快接近50%,FastJSON和Gson速度接近。
  2. JSON反序列化成Java对象
    FastJSON、Jackson速度最快且接近,Gson速度稍慢,不过差距很小。
  3. 复杂的JSON结构转换稳定性
    Gson成功率明显比FastJSON、Jackson都要高,复杂JSON结构转换时稳定性Gson最好

3. JSON 在 JavaScript 中的转换

JSON全局对象:

  1. <html>
  2. <head>
  3. <title>测试json</title>
  4. <script>
  5. function f_json() {
  6. var user = {
  7. "name": "周杰伦",
  8. "address": "中国台湾"
  9. };
  10. //将 JS 对象转换成 JSON 字符串
  11. var str = JSON.stringify(user);
  12. alert(str);
  13. //将 JSON 字符串转换成 js 对象
  14. var zxy = JSON.parse(str);
  15. alert(zxy.name + "," + zxy.address);
  16. }
  17. </script>
  18. </head>
  19. <body>
  20. <button onclick="f_json()">测试</button>
  21. </body>
  22. </html>

eval() 全局方法:

  1. <script>
  2. // JSON 字符串转换为 JS 对象:eval()
  3. var jsonStr = '{"username":"root", "password":"1234"}';
  4. var obj = eval("(" + jsonStr + ")"); // 固定语法,将json字符串转换成js对象
  5. console.log(obj.username + "," + obj.password);
  6. </script>

发表评论

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

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

相关阅读