You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:15:25