2 回答

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊
JsonPath庫(kù)允許您僅選擇必需的字段,然后您可以使用它將Jackson
原始數(shù)據(jù)轉(zhuǎn)換為POJO
類(lèi)。示例解決方案如下所示:
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.CollectionType;
import com.jayway.jsonpath.JsonPath;
import java.io.File;
import java.util.List;
import java.util.Map;
public class JsonPathApp {
? ? public static void main(String[] args) throws Exception {
? ? ? ? File jsonFile = new File("./resource/test.json").getAbsoluteFile();
? ? ? ? List<Map> nodes = JsonPath.parse(jsonFile).read("$..value[*].user.name");
? ? ? ? ObjectMapper mapper = new ObjectMapper();
? ? ? ? CollectionType usersType = mapper.getTypeFactory().constructCollectionType(List.class, User.class);
? ? ? ? List<User> users = mapper.convertValue(nodes, usersType);
? ? ? ? System.out.println(users);
? ? }
}
class User {
? ? @JsonProperty("first")
? ? private String firstName;
? ? @JsonProperty("last")
? ? private String lastName;
? ? public String getFirstName() {
? ? ? ? return firstName;
? ? }
? ? public void setFirstName(String firstName) {
? ? ? ? this.firstName = firstName;
? ? }
? ? public String getLastName() {
? ? ? ? return lastName;
? ? }
? ? public void setLastName(String lastName) {
? ? ? ? this.lastName = lastName;
? ? }
? ? @Override
? ? public String toString() {
? ? ? ? return "User{" +
? ? ? ? ? ? ? ? "firstName='" + firstName + '\'' +
? ? ? ? ? ? ? ? ", lastName='" + lastName + '\'' +
? ? ? ? ? ? ? ? '}';
? ? }
}
上面的代碼打?。?/p>
[User{firstName='x', lastName='y'}]

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊
另一種簡(jiǎn)單的方法是使用JSON.simple庫(kù):
JSONParser jsonParser = new JSONParser();
? ? ? ? //Read JSON file
? ? ? ? Object obj = jsonParser.parse(reader);
? ? ? ? JSONObject jObj = (JSONObject) obj;
? ? ? ? JSONObject root = (JSONObject)jObj.get("root");
? ? ? ? JSONObject data = (JSONObject) root.get("data");
? ? ? ? JSONArray value =? (JSONArray) data.get("value");
? ? ? ? JSONObject array = (JSONObject) value.get(0);
? ? ? ? JSONObject user = (JSONObject) array.get("user");
? ? ? ? JSONObject name = (JSONObject) user.get("name");
? ? ? ? String lastName = (String) name.get("last");
? ? ? ? String firstName = (String) name.get("first");
? ? ? ? System.out.println(lastName + " " + firstName);
添加回答
舉報(bào)