如何解析JSON只得到一个字段?
How to parse JSON and get only one field?
我收到 JSON,我想解析它:
[
{
"id": "f9952c24-1b44-4379-9aef-b10075e93562",
"sections": [
{
"id": "7fe9f47e-9cfe-46c7-9c77-f729b9fb98a4",
"type": "vehicle",
"summary": {
"duration": 23377,
"length": 480501,
"baseDuration": 22140
}
}
]
}
]
我的Java模型类(由json2pojo生成):
public class HereRoute {
@SerializedName("routes")
@Expose
private List<Route> routes = null;
}
public class Route {
@SerializedName("id")
@Expose
private String id;
@SerializedName("sections")
@Expose
private List<Section> sections = null;
}
public class Section {
@SerializedName("id")
@Expose
private String id;
@SerializedName("type")
@Expose
private String type;
@SerializedName("summary")
@Expose
private Summary summary;
}
public class Summary {
@SerializedName("duration")
@Expose
private Integer duration;
@SerializedName("length")
@Expose
private Integer length;
@SerializedName("baseDuration")
@Expose
private Integer baseDuration;
}
我只对要保存在数据库中的摘要长度感兴趣。
我如何解析它以仅获取 json 中每个对象的摘要长度?
我需要像 Gson 这样的东西吗?
首先在您的项目中包含 JSON
库。
然后像这样遍历 JSON:
JSONArray firstLevelArrray = new JSONArray(jsonString); // Getting the big array
for(int i = 0 ; i < firstLevelArrray.length(); i++)
{
Integer length = firstLevelArray.getJSONObject(i) // getting the first object of the array
.getJSONArray("sections") // Getting the sections array
.getJSONObject(0) // Getting the first element of the sections array
.getJSONObject("summary")
.getInt("length");
// But how sure are you that you won't have a null in there?
}
我还是不会走这条路,NullPointerException
的可能性很大。你总是可以处理它并把它当作字段不在那里一样,但仍然......
您可以使用 'jackson' 进行反序列化。
使用 maven 包含依赖项
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.0</version>
</dependency>
使用 ObjectMapper 反序列化您的 JSON 字符串。
ObjectMapper mapper = new ObjectMapper();
data = mapper.readValue(json, Data[].class);
一个完整的工作示例如下
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Test {
static String json = "[\r\n"
+ " {\r\n"
+ " \"id\": \"f9952c24-1b44-4379-9aef-b10075e93562\",\r\n"
+ " \"sections\": [\r\n"
+ " {\r\n"
+ " \"id\": \"7fe9f47e-9cfe-46c7-9c77-
f729b9fb98a4\",\r\n"
+ " \"type\": \"vehicle\",\r\n"
+ " \"summary\": {\r\n"
+ " \"duration\": 23377,\r\n"
+ " \"length\": 480501,\r\n"
+ " \"baseDuration\": 22140\r\n"
+ " }\r\n"
+ " }\r\n"
+ " ]\r\n"
+ " }\r\n"
+ "]";
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
Test.Data data[] = null;
try {
data = mapper.readValue(json, Data[].class);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(data[0].sections[0].summary.length);
}
private static class Data {
String id;
Sections sections[];
public Data() {
super();
}
public Data(String id, Test.Sections[] sections) {
super();
this.id = id;
this.sections = sections;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Sections[] getSections() {
return sections;
}
public void setSections(Sections[] sections) {
this.sections = sections;
}
}
private static class Sections {
private String id;
private String type;
private Summary summary;
public Sections() {
super();
}
public Sections(String id, String type, Test.Summary summary) {
super();
this.id = id;
this.type = type;
this.summary = summary;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Summary getSummary() {
return summary;
}
public void setSummary(Summary summary) {
this.summary = summary;
}
}
private static class Summary {
private Integer duration;
private Integer length;
private Integer baseDuration;
public Summary() {
super();
}
public Summary(Integer duration, Integer length, Integer baseDuration) {
super();
this.duration = duration;
this.length = length;
this.baseDuration = baseDuration;
}
public Integer getDuration() {
return duration;
}
public void setDuration(Integer duration) {
this.duration = duration;
}
public Integer getLength() {
return length;
}
public void setLength(Integer length) {
this.length = length;
}
public Integer getBaseDuration() {
return baseDuration;
}
public void setBaseDuration(Integer baseDuration) {
this.baseDuration = baseDuration;
}
}
}
我收到 JSON,我想解析它:
[
{
"id": "f9952c24-1b44-4379-9aef-b10075e93562",
"sections": [
{
"id": "7fe9f47e-9cfe-46c7-9c77-f729b9fb98a4",
"type": "vehicle",
"summary": {
"duration": 23377,
"length": 480501,
"baseDuration": 22140
}
}
]
}
]
我的Java模型类(由json2pojo生成):
public class HereRoute {
@SerializedName("routes")
@Expose
private List<Route> routes = null;
}
public class Route {
@SerializedName("id")
@Expose
private String id;
@SerializedName("sections")
@Expose
private List<Section> sections = null;
}
public class Section {
@SerializedName("id")
@Expose
private String id;
@SerializedName("type")
@Expose
private String type;
@SerializedName("summary")
@Expose
private Summary summary;
}
public class Summary {
@SerializedName("duration")
@Expose
private Integer duration;
@SerializedName("length")
@Expose
private Integer length;
@SerializedName("baseDuration")
@Expose
private Integer baseDuration;
}
我只对要保存在数据库中的摘要长度感兴趣。 我如何解析它以仅获取 json 中每个对象的摘要长度? 我需要像 Gson 这样的东西吗?
首先在您的项目中包含 JSON
库。
然后像这样遍历 JSON:
JSONArray firstLevelArrray = new JSONArray(jsonString); // Getting the big array
for(int i = 0 ; i < firstLevelArrray.length(); i++)
{
Integer length = firstLevelArray.getJSONObject(i) // getting the first object of the array
.getJSONArray("sections") // Getting the sections array
.getJSONObject(0) // Getting the first element of the sections array
.getJSONObject("summary")
.getInt("length");
// But how sure are you that you won't have a null in there?
}
我还是不会走这条路,NullPointerException
的可能性很大。你总是可以处理它并把它当作字段不在那里一样,但仍然......
您可以使用 'jackson' 进行反序列化。
使用 maven 包含依赖项
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.0</version>
</dependency>
使用 ObjectMapper 反序列化您的 JSON 字符串。
ObjectMapper mapper = new ObjectMapper();
data = mapper.readValue(json, Data[].class);
一个完整的工作示例如下
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Test {
static String json = "[\r\n"
+ " {\r\n"
+ " \"id\": \"f9952c24-1b44-4379-9aef-b10075e93562\",\r\n"
+ " \"sections\": [\r\n"
+ " {\r\n"
+ " \"id\": \"7fe9f47e-9cfe-46c7-9c77-
f729b9fb98a4\",\r\n"
+ " \"type\": \"vehicle\",\r\n"
+ " \"summary\": {\r\n"
+ " \"duration\": 23377,\r\n"
+ " \"length\": 480501,\r\n"
+ " \"baseDuration\": 22140\r\n"
+ " }\r\n"
+ " }\r\n"
+ " ]\r\n"
+ " }\r\n"
+ "]";
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
Test.Data data[] = null;
try {
data = mapper.readValue(json, Data[].class);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(data[0].sections[0].summary.length);
}
private static class Data {
String id;
Sections sections[];
public Data() {
super();
}
public Data(String id, Test.Sections[] sections) {
super();
this.id = id;
this.sections = sections;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Sections[] getSections() {
return sections;
}
public void setSections(Sections[] sections) {
this.sections = sections;
}
}
private static class Sections {
private String id;
private String type;
private Summary summary;
public Sections() {
super();
}
public Sections(String id, String type, Test.Summary summary) {
super();
this.id = id;
this.type = type;
this.summary = summary;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Summary getSummary() {
return summary;
}
public void setSummary(Summary summary) {
this.summary = summary;
}
}
private static class Summary {
private Integer duration;
private Integer length;
private Integer baseDuration;
public Summary() {
super();
}
public Summary(Integer duration, Integer length, Integer baseDuration) {
super();
this.duration = duration;
this.length = length;
this.baseDuration = baseDuration;
}
public Integer getDuration() {
return duration;
}
public void setDuration(Integer duration) {
this.duration = duration;
}
public Integer getLength() {
return length;
}
public void setLength(Integer length) {
this.length = length;
}
public Integer getBaseDuration() {
return baseDuration;
}
public void setBaseDuration(Integer baseDuration) {
this.baseDuration = baseDuration;
}
}
}