将json文件读取成字符串
public static String getJsonStr(File jsonFile){try {FileReader fileReader = new FileReader(jsonFile);Reader reader = new InputStreamReader(new FileInputStream(jsonFile),"utf-8");int ch = 0;StringBuffer sb = new StringBuffer();while ((ch = reader.read()) != -1) {sb.append((char) ch);}fileReader.close();reader.close();return sb.toString();} catch (IOException e) {e.printStackTrace();return null;}
}
main方法解析json文件,转化成自定义对象集合并保存至数据库
public void Task1() {String json = "D:\\media\\resource\\RadarPic\\城镇预报数据.json";File jsonFile = new File(json);//通过上面那个方法获取json文件的内容String jsonData = this.getJsonStr(jsonFile);SevpChnWefcRffc sevpChnWefcRffc = JsonConverter.jsonString2Bean(jsonData, SevpChnWefcRffc.class);List<SevpChnWefcRffcItem> ds = sevpChnWefcRffc.getDs();for (List<SevpChnWefcRffcItem> l1 : ListUtils.splitList(ds, 20)) {if (l1.size() > 0) {int row1 = sevpChnWefcRffcMapper.insertSevpChnWefcRffc(l1);}}
}
json工具类
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;public class JsonConverter {private static ObjectMapper mapper = new ObjectMapper();public static String bean2Json(Object obj) {try {return mapper.writeValueAsString(obj);} catch (JsonProcessingException e) {e.printStackTrace();return null;}}public static <T> T jsonString2Bean(String jsonStr, Class<T> objClass) {if (jsonStr == null) return null;try {return mapper.readValue(jsonStr, objClass);} catch (IOException e) {e.printStackTrace();return null;}}@JsonIgnoreProperties(ignoreUnknown = true)public static <T> T jsonObject2Bean(Object jsonObject, Class<T> bean) {mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);return mapper.convertValue(jsonObject, bean);}public static JsonNode jsonString2JsonNode(String jsonString) {if (jsonString == null) return null;try {return mapper.readTree(jsonString);} catch (IOException e) {e.printStackTrace();return null;}}public static Map<String, Object> jsonNode2HashMap(JsonNode jsonNode) {Map<String, Object> map = new HashMap<>();if (jsonNode.isObject()) {Iterator<Map.Entry<String, JsonNode>> fieldsIterator = jsonNode.fields();while (fieldsIterator.hasNext()) {Map.Entry<String, JsonNode> field = fieldsIterator.next();String key = field.getKey();JsonNode value = field.getValue();if (value.isValueNode()) {map.put(key, value.asText());} else if (value.isObject() || value.isArray()) {map.put(key, jsonNode2HashMap(value));}}} else if (jsonNode.isArray()) {int i = 0;for (JsonNode node : jsonNode) {if (node.isValueNode()) {map.put(Integer.toString(i), node.asText());} else if (node.isObject() || node.isArray()) {map.put(Integer.toString(i), jsonNode2HashMap(node));}i++;}}return map;}/*** 将JSON数据格式化并保存到文件中* @param jsonData 需要输出的json数* @param filePath 输出的文件地址* @return 结果*/public static boolean saveJsonFile(Object jsonData, String filePath) {String content = JSON.toJSONString(jsonData, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteDateUseDateFormat);boolean flag = true;try {File file = new File(filePath);if (!file.getParentFile().exists()) {boolean mkdirs = file.getParentFile().mkdirs();}if (file.exists()) {boolean delete = file.delete();}boolean newFile = file.createNewFile();Writer write = new OutputStreamWriter(Files.newOutputStream(file.toPath()), StandardCharsets.UTF_8);write.write(content);write.flush();write.close();} catch (Exception e) {e.printStackTrace();flag = false;}return flag;}
}
自定义类
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;import java.util.List;@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@EqualsAndHashCode
@Data
public class SevpChnWefcRffc {@JsonProperty(value = "DS")private List<SevpChnWefcRffcItem> ds;
}
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;import java.util.Date;@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@EqualsAndHashCode
@Data
public class SevpChnWefcRffcItem {/*** ID*/private Integer id;/*** 省名*/@JsonProperty(value = "Province")private String province;/*** 地市名*/@JsonProperty(value = "City")private String city;/*** 行政编码*/@JsonProperty(value = "Admin_Code_CHN")private String adminCodeChn;/*** 区县名*/@JsonProperty(value = "Cnty")private String cnty;/*** 区站号*/@JsonProperty(value = "Station_Id_C")private String stationIdC;/*** 站名*/@JsonProperty(value = "Station_Name")private String stationName;/*** 测站级别*/@JsonProperty(value = "Station_levl")private String stationLevel;/*** 纬度*/@JsonProperty(value = "Lat")private String lat;/*** 经度*/@JsonProperty(value = "Lon")private String lon;/*** 资料时间*/@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")@JsonProperty(value = "Datetime")private Date dateTime;/*** 产品描述*/@JsonProperty(value = "PROD_DESC")private String prodDesc;/*** 产品代码*/@JsonProperty(value = "PROD_CODE")private String prodCode;/*** 预报时效*/@JsonProperty(value = "Validtime")private Integer validTime;/*** 温度*/@JsonProperty(value = "TEM")private Double tem;/*** 气压*/@JsonProperty(value = "PRS")private Double prs;/*** 风向*/@JsonProperty(value = "WIN_D")private Double winD;/*** 风速*/@JsonProperty(value = "WIN_S")private Double winS;/*** 相对湿度*/@JsonProperty(value = "RHU")private Double rhu;/*** 可降水分*/@JsonProperty(value = "PRE_PRE_Fore")private Double prePreFore;/*** 天气现象*/@JsonProperty(value = "WEP")private Integer wep;/*** 能见度*/@JsonProperty(value = "VIS")private Double vis;
}
大集合转化成若干个小集合
import java.util.ArrayList;
import java.util.List;public class ListUtils {/*** 将集合拆分成若干个batch,并将batch存于新的集合* @param list 目标集合* @param size batch大小* List m: [a, b, c, d, e, f, g]* -> splitList(m, 3)* -> [[a, b, c], [d, e, f], [g]]* @return List<Batch>*/public static <T> List<List<T>> splitList(List<T> list, int size) {if (list == null) return null;List<List<T>> l1 = new ArrayList<>();if (list.size() <= size) l1.add(list);else {int s = list.size();int x = s / size;int y = s % size;if (y != 0) x = x + 1;int index = 0;for (int i = 0; i < x; i++) {List<T> l2 = new ArrayList<>();for (int j = 0; j < list.size(); j++) {l2.add(list.get(index));index++;if (l2.size() == size) {l1.add(l2);break;} else if (x == l1.size()+1 && y == l2.size()) {l1.add(l2);break;}}}}return l1;}
}