Java 尝试使用jackson流式api解析json
我有这个jsonJava 尝试使用jackson流式api解析json,java,json,jackson,Java,Json,Jackson,我有这个json [{ "id":"1", "firstname":"X", "lastname":"y", "contactnumbers":["905123123"] },{ "id":"2", "firstname":"Jo", "lastname":"Be", "contactnumbers":["416888888", "951233333"] }] 我试图用下面的代码来解析它 if (jsonParser.nextToken() == Jso
[{
"id":"1",
"firstname":"X",
"lastname":"y",
"contactnumbers":["905123123"]
},{
"id":"2",
"firstname":"Jo",
"lastname":"Be",
"contactnumbers":["416888888", "951233333"]
}]
我试图用下面的代码来解析它
if (jsonParser.nextToken() == JsonToken.START_ARRAY){
if (jsonParser.nextToken() == JsonToken.START_OBJECT){
c = new Person();
while (jsonParser.nextToken() != JsonToken.END_OBJECT){
if (jsonParser.getCurrentName().equals("id")){
c.setId(jsonParser.getValueAsString());
jsonParser.nextToken();
} else if (jsonParser.getCurrentName().equals("firstname")){
c.setFirstName(jsonParser.getValueAsString());
jsonParser.nextToken();
} else if (jsonParser.getCurrentName().equals("lastname")){
c.setLastName(jsonParser.getValueAsString());
jsonParser.nextToken();
} else if (jsonParser.getCurrentName().equals("contactnumbers")){
List<String> s = new ArrayList<String>();
while (jsonParser.nextToken() != JsonToken.END_ARRAY){
s.add(jsonParser.nextValue().asString());
}
}
}
}
if (c != null) {
personList.add(c);
}
}
if(jsonParser.nextToken()==JsonToken.START\u数组){
if(jsonParser.nextToken()==JsonToken.START\u对象){
c=新人();
while(jsonParser.nextToken()!=JsonToken.END\u对象){
if(jsonParser.getCurrentName().equals(“id”)){
c、 setId(jsonParser.getValueAsString());
jsonParser.nextToken();
}else if(jsonParser.getCurrentName().equals(“firstname”)){
c、 setFirstName(jsonParser.getValueAsString());
jsonParser.nextToken();
}else if(jsonParser.getCurrentName().equals(“lastname”)){
c、 setLastName(jsonParser.getValueAsString());
jsonParser.nextToken();
}else if(jsonParser.getCurrentName().equals(“ContactNumber”)){
列表s=新的ArrayList();
while(jsonParser.nextToken()!=JsonToken.END_数组){
s、 添加(jsonParser.nextValue().asString());
}
}
}
}
如果(c!=null){
添加(c);
}
}
但是很明显,即使是我最外层的
,如果没有执行。我不知道为什么 不是很好的代码,但它可以工作
Person.java:
package org.jackson.example;
import java.sql.Date;
import java.util.List;
public class Person {
private String id;
private String firstName;
private String lastName;
private List<String> contactNumbers;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
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;
}
public List<String> getContactNumbers() {
return contactNumbers;
}
public void setContactNumbers(List<String> contactNumbers) {
this.contactNumbers = contactNumbers;
}
@Override
public String toString() {
return "Person [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", contactNumbers="
+ contactNumbers + "]";
}
}
package org.jackson.example;
导入java.sql.Date;
导入java.util.List;
公共阶层人士{
私有字符串id;
私有字符串名;
私有字符串lastName;
私人通讯录号码;
公共字符串getId(){
返回id;
}
公共无效集合id(字符串id){
this.id=id;
}
公共字符串getFirstName(){
返回名字;
}
public void setFirstName(字符串firstName){
this.firstName=firstName;
}
公共字符串getLastName(){
返回姓氏;
}
public void setLastName(字符串lastName){
this.lastName=lastName;
}
公共列表GetContactNumber(){
返回联系人号码;
}
公共无效设置联系人号码(列出联系人号码){
this.contactnumber=contactnumber;
}
@凌驾
公共字符串toString(){
return“Person[id=“+id+”,firstName=“+firstName+”,lastName=“+lastName+”,contactNumbers=”
+联系人号码+“]”;
}
}
StreamJacksonApi.java:
package org.jackson.example;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
public class StreamJacksonApi {
public static void main(String[] args) throws JsonParseException, IOException {
List<Person> personList = new ArrayList<>();
String content = "[{ \"id\":\"1\", \"firstname\":\"X\", \"lastname\":\"y\", \"contactnumbers\":[\"905123123\"] },{ \"id\":\"2\", \"firstname\":\"Jo\", \"lastname\":\"Be\", \"contactnumbers\":[\"416888888\", \"951233333\"] }]";
JsonFactory jsonFactory = new JsonFactory();
@SuppressWarnings("deprecation")
JsonParser jsonParser = jsonFactory.createJsonParser(content); //Omit deprecation
jsonParser.nextToken();
while (jsonParser.nextToken() != JsonToken.END_ARRAY){
final Person c = new Person();
while (jsonParser.nextToken() != JsonToken.END_OBJECT){
if (jsonParser.getCurrentName().equals("id")){
c.setId(jsonParser.getValueAsString());
} else if (jsonParser.getCurrentName().equals("firstname")){
c.setFirstName(jsonParser.getValueAsString());
} else if (jsonParser.getCurrentName().equals("lastname")){
c.setLastName(jsonParser.getValueAsString());
} else if (jsonParser.getCurrentName().equals("contactnumbers")){
List<String> s = new ArrayList<String>();
while (jsonParser.nextToken() != JsonToken.END_ARRAY){
final String token = jsonParser.getValueAsString();
if(token != null) {
s.add(token);
}
}
c.setContactNumbers(s);
}
}
if (c != null) {
personList.add(c);
}
}
for (Person person : personList) {
System.out.println(person);
}
}
}
package org.jackson.example;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入com.fasterxml.jackson.core.JsonFactory;
导入com.fasterxml.jackson.core.JsonParseException;
导入com.fasterxml.jackson.core.JsonParser;
导入com.fasterxml.jackson.core.JsonToken;
公营班级{
公共静态void main(字符串[]args)抛出JsonParseException、IOException{
List personList=新建ArrayList();
String content=“[{“id\”:“1\”,“firstname\”:“X\”,“lastname\”:“y\”,“contactnumbers\”:[\“905123123\”],{“id\”:“2\”,“firstname\”:“Jo\”,“lastname\”:“Be\,“contactnumbers\”:[\“41688888\”,“951233333\”];
JsonFactory JsonFactory=新的JsonFactory();
@抑制警告(“弃用”)
JsonParser JsonParser=jsonFactory.createJsonParser(内容);//省略弃用
jsonParser.nextToken();
while(jsonParser.nextToken()!=JsonToken.END_数组){
最终人员c=新人员();
while(jsonParser.nextToken()!=JsonToken.END\u对象){
if(jsonParser.getCurrentName().equals(“id”)){
c、 setId(jsonParser.getValueAsString());
}else if(jsonParser.getCurrentName().equals(“firstname”)){
c、 setFirstName(jsonParser.getValueAsString());
}else if(jsonParser.getCurrentName().equals(“lastname”)){
c、 setLastName(jsonParser.getValueAsString());
}else if(jsonParser.getCurrentName().equals(“ContactNumber”)){
列表s=新的ArrayList();
while(jsonParser.nextToken()!=JsonToken.END_数组){
最终字符串标记=jsonParser.getValueAsString();
if(令牌!=null){
s、 添加(令牌);
}
}
c、 设置联系人号码;
}
}
如果(c!=null){
添加(c);
}
}
for(个人:个人列表){
系统输出打印项次(人);
}
}
}
另请注意,因为最外层的条件没有执行,所以问题可能出现在之前的代码中。请添加此代码。由于您是一位经验丰富的用户,我假设您检查了相关对象是否为null或其他…(但请注意)我在IDE中将parser.nextToken()设置为“watch”。由于这个原因,最外层的条件并没有被执行。这已经被删除。现在我正在努力正确解析它:s。。。还在挣扎