如何读取我从 firebase 下载的 json 数据文件作为 gson?
How to read the json data file I downloaded from firebase as gson?
我的json文件...我确定Json
没有错误
{
"-MHG5VdrTky1GdpmNLHl": {
"author_id": "data1",
"create_date": 1600162233475,
"display_name": "data1",
"phone_number": "data1"
},
"-MHG5Vdsy6Hd1zrcRkmm": {
"author_id": "data1",
"create_date": 1600162233475,
"display_name": "data1",
"phone_number": "data1"
},
"-MHG5Vdsy6Hd1zrcRkmn": {
"author_id": "data1",
"create_date": 1600162233475,
"display_name": "data1",
"phone_number": "data1"
}
}
我的 json 文件大小 1gb。我如何用那个 Gson 读取这个文件?
我的阅读方法..
InputStream inputStream = new FileInputStream(path);
Gson gson = new Gson();
JsonReader reader = new JsonReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
List<ContactList> contactListList = new ArrayList<>();
reader.beginObject();
while (reader.hasNext()) {
ContactList cts = gson.fromJson(reader, ContactList.class);
// contactListList.add(cts);
}
reader.endArray();
reader.close();
我得到的错误 ::=> java.lang.IllegalStateException:预期 BEGIN_OBJECT 但名称在第 1 行第 3 列路径 $.
我的联系人列表class 这样我就无法读取对象。
public class ContactList {
private String author_id;
private String display_name;
private String phone_number;
private long create_date;
public ContactList(){}
public ContactList(String author_id, String display_name, String phone_number, long create_date) {
this.author_id = author_id;
this.display_name = display_name;
this.phone_number = phone_number;
this.create_date = create_date;
}
public String getAuthor_id() {
return author_id;
}
public void setAuthor_id(String author_id) {
this.author_id = author_id;
}
public String getDisplay_name() {
return display_name;
}
public void setDisplay_name(String display_name) {
this.display_name = display_name;
}
public String getPhone_number() {
return phone_number;
}
public void setPhone_number(String phone_number) {
this.phone_number = phone_number;
}
public long getCreate_date() {
return create_date;
}
public void setCreate_date(long create_date) {
this.create_date = create_date;
}
}
这是一个解决方法,但您需要找到您拥有的每个对象并手动添加它,因为您不知道对象名称。
while (reader.hasNext())
{
String name = reader.nextName();
String author_id = "";
String create_date = "";
String display_name = "";
String phone_number = "";
if (name.equals("author_id"))
{
author_id = reader.nextString();
}
else if (name.equals("create_date"))
{
create_date = String.valueOf(reader.nextLong());
}
else if (name.equals("display_name"))
{
display_name = reader.nextString();
}
else if (name.equals("phone_number"))
{
phone_number = reader.nextString();
}
else
{
reader.skipValue();
}
ContactList contactList = new ContactList(author_id, create_date, display_name, 0L);
contactListArray.add(contactList);
}
我认为你可以使用它!!我希望你得到它 运行!!
我的json文件...我确定Json
没有错误{
"-MHG5VdrTky1GdpmNLHl": {
"author_id": "data1",
"create_date": 1600162233475,
"display_name": "data1",
"phone_number": "data1"
},
"-MHG5Vdsy6Hd1zrcRkmm": {
"author_id": "data1",
"create_date": 1600162233475,
"display_name": "data1",
"phone_number": "data1"
},
"-MHG5Vdsy6Hd1zrcRkmn": {
"author_id": "data1",
"create_date": 1600162233475,
"display_name": "data1",
"phone_number": "data1"
}
}
我的 json 文件大小 1gb。我如何用那个 Gson 读取这个文件?
我的阅读方法..
InputStream inputStream = new FileInputStream(path);
Gson gson = new Gson();
JsonReader reader = new JsonReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
List<ContactList> contactListList = new ArrayList<>();
reader.beginObject();
while (reader.hasNext()) {
ContactList cts = gson.fromJson(reader, ContactList.class);
// contactListList.add(cts);
}
reader.endArray();
reader.close();
我得到的错误 ::=> java.lang.IllegalStateException:预期 BEGIN_OBJECT 但名称在第 1 行第 3 列路径 $.
我的联系人列表class 这样我就无法读取对象。
public class ContactList {
private String author_id;
private String display_name;
private String phone_number;
private long create_date;
public ContactList(){}
public ContactList(String author_id, String display_name, String phone_number, long create_date) {
this.author_id = author_id;
this.display_name = display_name;
this.phone_number = phone_number;
this.create_date = create_date;
}
public String getAuthor_id() {
return author_id;
}
public void setAuthor_id(String author_id) {
this.author_id = author_id;
}
public String getDisplay_name() {
return display_name;
}
public void setDisplay_name(String display_name) {
this.display_name = display_name;
}
public String getPhone_number() {
return phone_number;
}
public void setPhone_number(String phone_number) {
this.phone_number = phone_number;
}
public long getCreate_date() {
return create_date;
}
public void setCreate_date(long create_date) {
this.create_date = create_date;
}
}
这是一个解决方法,但您需要找到您拥有的每个对象并手动添加它,因为您不知道对象名称。
while (reader.hasNext())
{
String name = reader.nextName();
String author_id = "";
String create_date = "";
String display_name = "";
String phone_number = "";
if (name.equals("author_id"))
{
author_id = reader.nextString();
}
else if (name.equals("create_date"))
{
create_date = String.valueOf(reader.nextLong());
}
else if (name.equals("display_name"))
{
display_name = reader.nextString();
}
else if (name.equals("phone_number"))
{
phone_number = reader.nextString();
}
else
{
reader.skipValue();
}
ContactList contactList = new ContactList(author_id, create_date, display_name, 0L);
contactListArray.add(contactList);
}
我认为你可以使用它!!我希望你得到它 运行!!