Json文件中获取需要的信息

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import javax.json.*;
import java.io.StringReader;
import java.text.DecimalFormat;

public class JsonParsingExample {
public static void main(String[] args) {
String json = "{\"bankRecords\":[{\"payrollDate\":1680148800000,\"amount\":\"1718.59\",\"balance\":\"1694.13\",\"payrollType\":18000,\"vob\":2,\"loanId\":52952367},{\"payrollDate\":1678939200000,\"amount\":\"2122.91\",\"balance\":\"2087.99\",\"payrollType\":18000,\"vob\":2,\"loanId\":52952367}]}";

try (JsonReader jsonReader = Json.createReader(new StringReader(json))) {
JsonObject jsonObject = jsonReader.readObject();
JsonArray bankRecords = jsonObject.getJsonArray("bankRecords");

for (JsonValue recordValue : bankRecords) {
JsonObject record = (JsonObject) recordValue;
int loanId = record.getInt("loanId");
int vob = record.getInt("vob");
long payrollDate = record.getJsonNumber("payrollDate").longValue();
int payrollType = record.getInt("payrollType");

JsonValue amountValue = record.get("amount");
double amount;
if (amountValue.getValueType() == JsonValue.ValueType.NUMBER) {
amount = ((JsonNumber) amountValue).doubleValue();
} else {
amount = Double.parseDouble(((JsonString) amountValue).getString());
}

JsonValue balanceValue = record.get("balance");
double balance;
if (balanceValue.getValueType() == JsonValue.ValueType.NUMBER) {
balance = ((JsonNumber) balanceValue).doubleValue();
} else {
balance = Double.parseDouble(((JsonString) balanceValue).getString());
}

DecimalFormat df = new DecimalFormat("#.00");
String formattedBalance = df.format(balance);

String result = loanId + ", " + vob + ", " + payrollDate + ", " + payrollType + ", " + amount + ", " + formattedBalance;
System.out.println(result);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

下面是代码解释:
这段代码是一个Java程序,用于解析一个包含银行记录的JSON字符串并对其进行处理和格式化输出。下面是每一行代码的解释:

package jsontest;:声明了一个名为jsontest的包,用于组织和管理相关的类。

import javax.json.*;:导入了javax.json包,其中包含用于处理JSON的类和接口。

import java.io.StringReader;:导入了java.io包中的StringReader类,用于读取字符串。

import java.text.DecimalFormat;:导入了java.text包中的DecimalFormat类,用于格式化数字。

public class JsonParsingExample {:定义了一个名为JsonParsingExample的公共类,表示这个Java程序的入口点。

public static void main(String[] args) {:定义了程序的主方法,从这里开始执行程序。

String json = “…”:定义了一个包含JSON数据的字符串变量json,这个字符串表示一个包含银行记录的JSON对象。

try (JsonReader jsonReader = Json.createReader(new StringReader(json))) {:创建了一个JsonReader对象,用于从JSON字符串中读取数据。使用try-with-resources语句,确保在代码块结束时关闭JsonReader。

JsonObject jsonObject = jsonReader.readObject();:读取JSON字符串并将其转换为JsonObject对象,表示整个JSON对象。

JsonArray bankRecords = jsonObject.getJsonArray(“bankRecords”);:从JsonObject中获取名为”bankRecords”的JsonArray对象,表示银行记录的数组。

for (JsonValue recordValue : bankRecords) {:对bankRecords中的每个银行记录进行迭代。

JsonObject record = (JsonObject) recordValue;:将JsonValue转换为JsonObject,表示单个银行记录。

int loanId = record.getInt(“loanId”);:从银行记录中获取名为”loanId”的整数值。

int vob = record.getInt(“vob”);:从银行记录中获取名为”vob”的整数值。

long payrollDate = record.getJsonNumber(“payrollDate”).longValue();:从银行记录中获取名为”payrollDate”的JsonNumber对象,并将其转换为长整型值。

int payrollType = record.getInt(“payrollType”);:从银行记录中获取名为”payrollType”的整数值。

JsonValue amountValue = record.get(“amount”);:从银行记录中获取名为”amount”的JsonValue对象。

double amount;:定义一个double类型的变量amount,用于存储金额值。

23-30. 在这些行中,根据amountValue的类型,将其转换为double类型的金额值。如果amountValue的值类型是数字类型(JsonValue.ValueType.NUMBER),则直接将其转换为double类型;否则,将其解析为字符串,然后将字符串转换为double类型。

JsonValue balanceValue = record.get(“balance”);:从银行记录中获取名为”balance”的JsonValue对象。

double balance;:定义一个double类型的变量balance,用于存储余额值。

34-41. 在这些行中,根据balanceValue的类型,将其转换为double类型的余额值。如果balanceValue的值类型是数字类型(JsonValue.ValueType.NUMBER),则直接将其转换为double类型;否则,将其解析为字符串,然后将字符串转换为double类型。

DecimalFormat df = new DecimalFormat(“#.00”);:创建一个DecimalFormat对象df,用于将数字格式化为指定的格式,保留两位小数。

String formattedBalance = df.format(balance);:使用DecimalFormat对象df对余额值进行格式化,得到格式化后的字符串形式。

String result = loanId + “, “ + vob + “, “ + payrollDate + “, “ + payrollType + “, “ + amount + “, “ + formattedBalance;:将银行记录中的各个字段值拼接成一个字符串result,以便输出。

System.out.println(result);:将字符串result打印到控制台,显示银行记录的各个字段值。

50-56. 在try块的末尾,捕获任何异常(Exception)并打印堆栈跟踪信息。

通过这段代码,可以解析JSON字符串中的银行记录,提取各个字段的值,并对金额和余额进行格式化后输出。