1.json报文

JSONJavaScript Object Notation(JavaScript 对象表示法)

JSON 语法是 JavaScript 对象表示语法的子集。

  1. 并列的数据之间用逗号(", ")分隔。
  2. 映射用冒号(": ")表示。
  3. 并列数据的集合(list,数组)用方括号("[]")表示。
  4. 映射的集合(对象)用大括号("{}")表示。

JSON 数据的书写格式是:名称/值对

对象{}

{ 
"name":"网站",
"num":3,
"Boolean":true,
"null":null,
"array": [ 
    { "name":"破站真难用" , "url":"https://mp.youkuaiyun.com" }, 
    { "name":"google" , "url":"www.google.com" }, 
    { "name":"微博" , "url":"www.weibo.com" } 
  ]
}

array[0].name = 破站真难用

 

 

java解析json报文

遇到 { 对象 } 用 JSONObject    遇到 [ 数组 ] 用 JSONArray

import org.json.JSONArray;
import org.json.JSONObject;

JSONObject jsonObject=new JSONObject(s);

 

 

list:

[
    list1,
    list2,
    list3
]

map: 

{
    "key1" : value1,
    "key2" : "value2",
    "key3" : "value3"
}

 

 

 

 

 

 

 

 

 

 

 

<think>我们使用Java读取JSON文件并导出为Excel表格。主要步骤包括: 1. 读取JSON文件,解析为Java对象(如Map或List)。 2. 创建Excel工作簿和工作表。 3.JSON的键作为表头(第一行)。 4.JSON的值作为数据行写入。 5. 保存Excel文件。 我们将使用以下库: - org.json(或Gson、Jackson等)来处理JSON。 - Apache POI来处理Excel文件。 这里我们选择使用org.json(因为简单)和Apache POI。 步骤: 1. 添加依赖: - 对于org.json:在Maven项目中添加依赖: <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20210307</version> </dependency> - 对于Apache POI: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.0.0</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.0.0</version> </dependency> 2. 代码实现: - 读取JSON文件,假设JSON文件是一个对象数组(即多个JSON对象,每个对象代表一行数据)或者是一个单一对象(一行数据)。这里我们假设是数组形式。 示例JSON文件(data.json)内容: [ {"name": "Alice", "age": 25, "city": "New York"}, {"name": "Bob", "age": 30, "city": "Paris"}, {"name": "Charlie", "age": 35, "city": "London"} ] 或者,如果JSON文件是一个对象(只有一行),则: {"name": "Alice", "age": 25, "city": "New York"} 为了通用性,我们处理两种形式:如果JSON是数组,则每个元素为一行;如果是单个对象,则只有一行。 3. 代码步骤: a. 读取JSON文件,解析为JSONArray(如果是数组)或JSONObject(如果是单个对象)。 b. 创建Excel工作簿(使用XSSFWorkbook,即.xlsx格式)。 c. 创建工作表。 d. 创建表头行:从第一个JSON对象中获取所有键(如果JSONArray非空,则取第一个元素;如果是单个对象,则直接取该对象)。 e. 写入数据行:遍历所有JSON对象,将值写入对应的单元格。 注意:如果JSONArray中每个对象的键不完全一致,我们可能需要收集所有可能的键作为表头。 4. 处理不一致的键:我们遍历整个JSON数组,收集所有出现过的键,然后去重,作为表头。 代码实现: 我们将编写一个方法,输入JSON文件路径和输出Excel文件路径。 具体代码:</think>### Java 读取 JSON 文件并导出为 Excel 表格 以下是完整的实现步骤,使用 **Jackson** 处理 JSON 数据,**Apache POI** 生成 Excel 文件: #### 1. 添加 Maven 依赖 ```xml <dependencies> <!-- Jackson JSON 处理 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.0</version> </dependency> <!-- Apache POI Excel 处理 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.2.3</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> </dependencies> ``` #### 2. Java 代码实现 ```java import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.FileOutputStream; import java.util.*; public class JsonToExcelConverter { public static void convertJsonToExcel(String jsonFilePath, String excelFilePath) { try { // 1. 读取 JSON 文件 ObjectMapper objectMapper = new ObjectMapper(); JsonNode rootNode = objectMapper.readTree(new File(jsonFilePath)); // 2. 准备 Excel 工作簿 Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Data"); // 3. 创建表头行 Row headerRow = sheet.createRow(0); Set<String> headers = new LinkedHashSet<>(); // 收集所有 JSON 键作为表头 if (rootNode.isArray()) { for (JsonNode node : rootNode) { node.fieldNames().forEachRemaining(headers::add); } } else { rootNode.fieldNames().forEachRemaining(headers::add); } // 写入表头 int colNum = 0; for (String header : headers) { Cell cell = headerRow.createCell(colNum++); cell.setCellValue(header); } // 4. 写入数据行 int rowNum = 1; List<String> headerList = new ArrayList<>(headers); if (rootNode.isArray()) { for (JsonNode node : rootNode) { Row dataRow = sheet.createRow(rowNum++); writeDataRow(dataRow, headerList, node); } } else { Row dataRow = sheet.createRow(rowNum++); writeDataRow(dataRow, headerList, rootNode); } // 5. 自动调整列宽 for (int i = 0; i < headers.size(); i++) { sheet.autoSizeColumn(i); } // 6. 保存 Excel 文件 try (FileOutputStream outputStream = new FileOutputStream(excelFilePath)) { workbook.write(outputStream); } System.out.println("Excel 文件生成成功: " + excelFilePath); } catch (Exception e) { e.printStackTrace(); } } private static void writeDataRow(Row row, List<String> headers, JsonNode node) { for (int i = 0; i < headers.size(); i++) { String key = headers.get(i); JsonNode valueNode = node.get(key); String value = (valueNode != null && !valueNode.isNull()) ? valueNode.asText() : ""; row.createCell(i).setCellValue(value); } } public static void main(String[] args) { convertJsonToExcel("input.json", "output.xlsx"); } } ``` #### 3. JSON 文件示例 (`input.json`) ```json [ { "id": 1, "name": "Alice", "email": "alice@example.com", "department": "HR" }, { "id": 2, "name": "Bob", "department": "Engineering", "join_date": "2023-01-15" }, { "id": 3, "name": "Charlie", "email": "charlie@example.com", "salary": 8500.50 } ] ``` #### 4. 输出结果说明 - 生成的 `output.xlsx` 文件包含: - **表头行**:所有 JSON 键的并集 (`id`, `name`, `email`, `department`, `join_date`, `salary`) - **数据行**:与 JSON 数组元素对应的值 - 缺失值自动留空 #### 关键特性 1. **动态表头处理**:自动收集所有 JSON 键作为表头 2. **空值处理**:缺失字段留空单元格 3. **数据类型兼容**:所有值转为字符串输出 4. **列宽自适应**:自动调整列宽适应内容 5. **支持两种 JSON 格式**: - JSON 数组(多行数据) - 单个 JSON 对象(单行数据) > **注意**:如果 JSON 结构是嵌套对象,需先将其展平为单层结构再处理[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值