java - 无法使用 gson 解析 json 输入

标签 java json gson

我尝试使用 Gson 解析器解析 json 输入文件,但它总是抛出错误

“预期为 BEGIN_ARRAY,但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT” 不知道我在这里缺少什么。如果我从 EventRecords 中删除引号(这不是有效的 json)并将下面的代码替换为//eventRecords = gson.fromJson(bufferedReader, SNSEventRecords.class);

test1.json:

{
    "EventRecords": [      
            {
                "eventVersion": "2.0",
                "eventSource": "aws:s3",
                "awsRegion": "us-east-1",
                "eventTime": "2018-05-10T17:10:01.420Z",
                "eventName": "ObjectCreated:Put"
            }
        ]
    }

记录.java

public class Record {

String eventVersion;
String eventSource;
String awsRegion;
String eventTime;
String eventName;

public String getEventVersion() {
    return eventVersion;
}
public void setEventVersion(String eventVersion) {
    this.eventVersion = eventVersion;
}
public String getEventSource() {
    return eventSource;
}
public void setEventSource(String eventSource) {
    this.eventSource = eventSource;
}
public String getAwsRegion() {
    return awsRegion;
}
public void setAwsRegion(String awsRegion) {
    this.awsRegion = awsRegion;
}
public String getEventTime() {
    return eventTime;
}
public void setEventTime(String eventTime) {
    this.eventTime = eventTime;
}
public String getEventName() {
    return eventName;
}
public void setEventName(String eventName) {
    this.eventName = eventName;
}
@Override
public String toString () {
  return ToStringBuilder.reflectionToString(this,ToStringStyle.MULTI_LINE_STYLE);
}
}

SNSEventRecords.java:

 public class SNSEventRecords {
    private List<Record> EventRecords;

    public List<Record> getEventRecords() {
        return EventRecords;
    }

    public void setEventRecords(List<Record> eventRecords) {
        this.EventRecords = eventRecords;
    }

    @Override
      public String toString () {
        return ToStringBuilder.reflectionToString(this,ToStringStyle.MULTI_LINE_STYLE);
      }


}

GsonEncoder.java:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.List;

import com.goo*emphasized text*gle.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;
import com.uberops.validator.gson.dto.Record;
import com.uberops.validator.gson.dto.SNSEventRecords;

public class GsonEncoder {
    public void jsonEncoder(String filePath) throws FileNotFoundException {

        Type listType = new TypeToken<List<Record>>(){}.getType();
        Gson gson = new Gson();
        JsonReader reader = new JsonReader(new FileReader(filePath));
        //BufferedReader reader = new BufferedReader(new FileReader(filePath));
        SNSEventRecords eventRecords = gson.fromJson(reader, listType); 
        List<Record> records = eventRecords.getEventRecords();
        System.out.println("\n\nEventRecords\n\n" + records.toString());

    }

    public static void main(String[] args) throws FileNotFoundException {
        GsonEncoder obj2 = new GsonEncoder();

        File f2 = new File("/Users/test/Desktop/test1.json");
        obj2.jsonEncoder(f2.getAbsolutePath());


    }
}

最佳答案

尝试设置serialized name eventRecords 字段的值以匹配 JSON。

@SerializedName("EventRecords") 
private List<Record> eventRecords;

关于java - 无法使用 gson 解析 json 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50378467/

相关文章:

java - 为什么 Stream.allMatch() 为空流返回 true?

javascript - ng-repeat 不同的嵌套 json

ios - tableView 没有快速显示来自 JSON 的数据

java - 错误: expected END_ARRAY but was STRING - only on specific phones when using mobile internet

java - 如何读取 json 文件,并使用 GSON 将其转换为 POJO

java - 如何跳过测试代码或将oracle语法转换为h2

java - 静态类/接口(interface)的 Guice 泛型配置错误

php - 使用 JSON 的实时搜索功能

java - 无法使用 GSON 将复杂的 json 序列化为对象?

java - 是否有任何 Gradle -Sqlj 插件可用于像我们使用 maven sqlj 插件一样进行 sqlj 翻译?