Java中从JSON格式字符串提取列名并生成制表符分隔字符串
提取JSON字符串中的列名并拼接为制表符分隔的字符串
嘿,这个需求很常见,我给你几个实用的实现方案,你可以根据项目的依赖情况来选:
方案一:用Jackson库(推荐,Java生态最常用的JSON处理工具)
Jackson是Java里处理JSON的首选工具,功能强大还好用。首先得给项目加个Jackson依赖:
如果是Maven项目,在pom.xml里添加:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> <!-- 用最新稳定版就行 --> </dependency>
然后写代码实现:
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; public class ColumnExtractor { public static void main(String[] args) throws Exception { String val = "{\"column\":[{\"name\":\"id,\",\"type\":\"int\"},{\"name\":\"empname\",\"type\":\"string\"}], \"database\":\"test\",\"table\":\"sample\"}"; ObjectMapper objectMapper = new ObjectMapper(); JsonNode rootNode = objectMapper.readTree(val); JsonNode columnsNode = rootNode.get("column"); StringBuilder result = new StringBuilder(); for (JsonNode column : columnsNode) { // 加trim是为了处理你输入里"id,"多出来的逗号,实际JSON没问题可以去掉 String name = column.get("name").asText().trim(); if (result.length() > 0) { result.append("\t"); // 用制表符分隔列名 } result.append(name); } System.out.println(result.toString()); // 输出:id empname } }
方案二:用org.json轻量库
要是不想引入Jackson这么大的依赖,用轻量级的org.json库也能搞定,体积小,足够处理这个需求。
Maven依赖:
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20230618</version> <!-- 最新稳定版 --> </dependency>
代码示例:
import org.json.JSONArray; import org.json.JSONObject; public class ColumnExtractor { public static void main(String[] args) { String val = "{\"column\":[{\"name\":\"id,\",\"type\":\"int\"},{\"name\":\"empname\",\"type\":\"string\"}], \"database\":\"test\",\"table\":\"sample\"}"; JSONObject rootObj = new JSONObject(val); JSONArray columnsArray = rootObj.getJSONArray("column"); StringBuilder result = new StringBuilder(); for (int i = 0; i < columnsArray.length(); i++) { JSONObject columnObj = columnsArray.getJSONObject(i); String name = columnObj.getString("name").trim(); if (i > 0) { result.append("\t"); } result.append(name); } System.out.println(result.toString()); } }
方案三:不使用第三方库(Java 11+,用javax.json)
要是项目不能加任何第三方依赖,且你用的是Java 11及以上,可以用Java EE的javax.json API(普通Java SE项目可能需要手动加依赖)。
Maven依赖:
<dependency> <groupId>javax.json</groupId> <artifactId>javax.json-api</artifactId> <version>1.1.4</version> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.json</artifactId> <version>1.1.4</version> </dependency>
代码示例:
import javax.json.Json; import javax.json.JsonArray; import javax.json.JsonObject; import javax.json.JsonReader; import java.io.StringReader; public class ColumnExtractor { public static void main(String[] args) { String val = "{\"column\":[{\"name\":\"id,\",\"type\":\"int\"},{\"name\":\"empname\",\"type\":\"string\"}], \"database\":\"test\",\"table\":\"sample\"}"; try (JsonReader reader = Json.createReader(new StringReader(val))) { JsonObject rootObj = reader.readObject(); JsonArray columnsArray = rootObj.getJsonArray("column"); StringBuilder result = new StringBuilder(); for (int i = 0; i < columnsArray.size(); i++) { JsonObject columnObj = columnsArray.getJsonObject(i); String name = columnObj.getString("name").trim(); if (i > 0) { result.append("\t"); } result.append(name); } System.out.println(result.toString()); } } }
小提醒
你给的原始JSON里"name":"id,"多了个逗号,所以代码里加了trim()处理这个情况,如果实际业务里的JSON没有这类小问题,可以去掉trim()。
内容的提问来源于stack exchange,提问作者Nightwing
相关产品推荐
相关产品推荐

