当前位置:   article > 正文

将数据写入json文件,并且读取json文件中的数据_把 json 写入一个文件,然后又可以读出来

把 json 写入一个文件,然后又可以读出来

目录

一、将数据生成json文件

二、读取json文件中的数据

三、方法测试

四、其他附件

1、User实体类

2、import


一、将数据生成json文件

方法

  1. /**
  2. * 生成.json格式文件
  3. */
  4. public static boolean createJsonFile(String jsonString, String filePath, String fileName) {
  5. // 标记文件生成是否成功
  6. boolean flag = true;
  7. // 拼接文件完整路径
  8. String fullPath = filePath + File.separator + fileName + ".json";
  9. // 生成json格式文件
  10. try {
  11. // 保证创建一个新文件
  12. File file = new File(fullPath);
  13. if (!file.getParentFile().exists()) { // 如果父目录不存在,创建父目录
  14. file.getParentFile().mkdirs();
  15. }
  16. if (file.exists()) { // 如果已存在,删除旧文件
  17. file.delete();
  18. }
  19. file.createNewFile();
  20. if(jsonString.indexOf("'")!=-1){
  21. //将单引号转义一下,因为JSON串中的字符串类型可以单引号引起来的
  22. jsonString = jsonString.replaceAll("'", "\\'");
  23. }
  24. if(jsonString.indexOf("\"")!=-1){
  25. //将双引号转义一下,因为JSON串中的字符串类型可以单引号引起来的
  26. jsonString = jsonString.replaceAll("\"", "\\\"");
  27. }
  28. if(jsonString.indexOf("\r\n")!=-1){
  29. //将回车换行转换一下,因为JSON串中字符串不能出现显式的回车换行
  30. jsonString = jsonString.replaceAll("\r\n", "\\u000d\\u000a");
  31. }
  32. if(jsonString.indexOf("\n")!=-1){
  33. //将换行转换一下,因为JSON串中字符串不能出现显式的换行
  34. jsonString = jsonString.replaceAll("\n", "\\u000a");
  35. }
  36. // 格式化json字符串
  37. jsonString = formatJson(jsonString);
  38. // 将格式化后的字符串写入文件
  39. Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
  40. write.write(jsonString);
  41. write.flush();
  42. write.close();
  43. } catch (Exception e) {
  44. flag = false;
  45. e.printStackTrace();
  46. }
  47. // 返回是否成功的标记
  48. return flag;
  49. }
  50. /**
  51. * 单位缩进字符串。
  52. */
  53. private static String SPACE = " ";
  54. /**
  55. * 返回格式化JSON字符串。
  56. *
  57. * @param json 未格式化的JSON字符串。
  58. * @return 格式化的JSON字符串。
  59. */
  60. public static String formatJson(String json) {
  61. StringBuffer result = new StringBuffer();
  62. int length = json.length();
  63. int number = 0;
  64. char key = 0;
  65. // 遍历输入字符串。
  66. for (int i = 0; i < length; i++) {
  67. // 1、获取当前字符。
  68. key = json.charAt(i);
  69. // 2、如果当前字符是前方括号、前花括号做如下处理:
  70. if ((key == '[') || (key == '{')) {
  71. // (1)如果前面还有字符,并且字符为“:”,打印:换行和缩进字符字符串。
  72. if ((i - 1 > 0) && (json.charAt(i - 1) == ':')) {
  73. result.append('\n');
  74. result.append(indent(number));
  75. }
  76. // (2)打印:当前字符。
  77. result.append(key);
  78. // (3)前方括号、前花括号,的后面必须换行。打印:换行。
  79. result.append('\n');
  80. // (4)每出现一次前方括号、前花括号;缩进次数增加一次。打印:新行缩进。
  81. number++;
  82. result.append(indent(number));
  83. // (5)进行下一次循环。
  84. continue;
  85. }
  86. // 3、如果当前字符是后方括号、后花括号做如下处理:
  87. if ((key == ']') || (key == '}')) {
  88. // (1)后方括号、后花括号,的前面必须换行。打印:换行。
  89. result.append('\n');
  90. // (2)每出现一次后方括号、后花括号;缩进次数减少一次。打印:缩进。
  91. number--;
  92. result.append(indent(number));
  93. // (3)打印:当前字符。
  94. result.append(key);
  95. // (4)如果当前字符后面还有字符,并且字符不为“,”,打印:换行。
  96. if (((i + 1) < length) && (json.charAt(i + 1) != ',')) {
  97. result.append('\n');
  98. }
  99. // (5)继续下一次循环。
  100. continue;
  101. }
  102. // 4、如果当前字符是逗号。逗号后面换行,并缩进,不改变缩进次数。
  103. /*if ((key == ',')) {
  104. result.append(key);
  105. result.append('\n');
  106. result.append(indent(number));
  107. continue;
  108. }*/
  109. // 5、打印:当前字符。
  110. result.append(key);
  111. }
  112. return result.toString();
  113. }
  114. /**
  115. * 返回指定次数的缩进字符串。每一次缩进三个空格,即SPACE。
  116. *
  117. * @param number 缩进次数。
  118. * @return 指定缩进次数的字符串。
  119. */
  120. private static String indent(int number) {
  121. StringBuffer result = new StringBuffer();
  122. for (int i = 0; i < number; i++) {
  123. result.append(SPACE);
  124. }
  125. return result.toString();
  126. }

二、读取json文件中的数据

方法

  1. //----------------读取json文件
  2. /**
  3. * 读取文件数据加入到map缓存中
  4. * @throws java.io.IOException
  5. * 依赖的jar包
  6. * <dependency>
  7. * <groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version>
  8. * </dependency>
  9. */
  10. public static void readJsonData() throws IOException {
  11. File file = new File("C:\\Users\\admin\\Desktop\\user.json");
  12. String jsonString = FileUtils.readFileToString(file);
  13. List<User> userList = JSON.parseArray(jsonString, User.class);
  14. for (User user : userList) {
  15. System.out.println(user.getName());
  16. }
  17. System.out.println(JSON.toJSONString(userList,true));
  18. }

 

三、方法测试

  1. public static void main(String[] args){
  2. //1、生成json文件--测试
  3. List<Object> agencyList = new ArrayList<Object>();
  4. Map<String, Object> agencyMap = new HashMap<>();
  5. agencyMap.put("name","张三");
  6. agencyMap.put("address", "北京市");
  7. agencyMap.put("companyName", "中国");
  8. agencyMap.put("logoImageId", "668");
  9. agencyMap.put("auctionAddress", "未知");
  10. agencyMap.put("logoImage", "你猜");
  11. agencyList.add(agencyMap);
  12. //将集合数据转换为json字符串(当然map集合亦可以):
  13. JSONArray jsonArray = JSONArray.fromObject(agencyList);
  14. String jsonString1 = jsonArray.toString();
  15. createJsonFile(jsonString1, "C:\\Users\\admin\\Desktop\\", "user");
  16. //项目demo
  17. List<User> userList = new ArrayList<>();
  18. Iterable<User> all = userRepository.findAll();
  19. for (User user: all) {
  20. userList .add(user);
  21. }
  22. //将集合数据转换为json字符串(当然map集合亦可以):
  23. JSONArray jsonArray = JSONArray.fromObject(userList);
  24. String jsonString1 = jsonArray.toString();
  25. createJsonFile(jsonString1, "C:\\Users\\admin\\Desktop\\", "user");
  26. //2、读取json文件
  27. try {
  28. readJsonData();
  29. } catch (IOException e) {
  30. e.printStackTrace();
  31. }
  32. }

 

四、其他附件

1、User实体类

  1. import lombok.Data;
  2. @Data
  3. public class User {
  4. private String name;
  5. private String address;
  6. private String companyName;
  7. private String logoImageId;
  8. }

2、import

  1. import com.alibaba.fastjson.JSON;
  2. import net.sf.json.JSONArray;
  3. import org.apache.commons.io.FileUtils;
  4. import java.io.*;
  5. import java.util.ArrayList;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/595988
推荐阅读
相关标签
  

闽ICP备14008679号