如何在Java中按指定需求拆分目标JSON字符串?
问题:拆分特定JSON字符串为指定3部分
原始JSON
{"locationType":"City","locationName":[{"id":"161341","name":"Badarganj, Rangpur Division, Bangladesh"}]}
目标拆分结果
希望拆分为以下3部分(按换行分隔):
{"locationType":"City" "locationName":[{"id":"161341" "name":"Badarganj, Rangpur Division, Bangladesh"}]}
尝试过的代码(未成功)
直接按逗号拆分会因为name字段值里的逗号导致拆分出更多片段,代码如下:
String tabValue = "{\"locationType\":\"City\",\"locationName\":[{\"id\":\"161341\",\"name\":\"Badarganj, Rangpur Division, Bangladesh\"}]}"; String[] spiltValue = tabValue.split(","); LOGGER.info("spiltValue1 ==== " + spiltValue[2]); LOGGER.info("spiltValue2 ==== " + spiltValue[3]); LOGGER.info("spiltValue3 ==== " + spiltValue[4]);
解决方案
方法1:使用JSON解析库(推荐)
直接拆分字符串容易受字段值内的特殊字符影响,用JSON解析库可以可靠处理结构。以Jackson为例:
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; public class JsonSplitExample { public static void main(String[] args) throws Exception { String tabValue = "{\"locationType\":\"City\",\"locationName\":[{\"id\":\"161341\",\"name\":\"Badarganj, Rangpur Division, Bangladesh\"}]}"; ObjectMapper mapper = new ObjectMapper(); JsonNode root = mapper.readTree(tabValue); // 提取各部分 String part1 = "{\"locationType\":\"" + root.get("locationType").asText() + "\""; JsonNode locationName = root.get("locationName").get(0); String part2 = "\"locationName\":[{\"id\":\"" + locationName.get("id").asText() + "\""; String part3 = "\"name\":\"" + locationName.get("name").asText() + "\"}]}"; // 输出结果 System.out.println(part1); System.out.println(part2); System.out.println(part3); } }
方法2:针对性字符串拆分(仅适用于固定格式)
如果确定JSON格式不会变化,可以通过匹配特定位置的逗号进行拆分,避开字段值内的逗号:
String tabValue = "{\"locationType\":\"City\",\"locationName\":[{\"id\":\"161341\",\"name\":\"Badarganj, Rangpur Division, Bangladesh\"}]}"; // 找到第一个需要拆分的逗号("City"后面的逗号) int firstSplitIdx = tabValue.indexOf(",\"locationName\""); // 找到第二个需要拆分的逗号("161341"后面的逗号) int secondSplitIdx = tabValue.indexOf(",\"name\"", firstSplitIdx); String part1 = tabValue.substring(0, firstSplitIdx); String part2 = tabValue.substring(firstSplitIdx + 1, secondSplitIdx); String part3 = tabValue.substring(secondSplitIdx + 1); // 输出结果 LOGGER.info("part1 ==== " + part1); LOGGER.info("part2 ==== " + part2); LOGGER.info("part3 ==== " + part3);
内容的提问来源于stack exchange,提问作者user21298211
相关产品推荐
相关产品推荐

