簡體   English   中英

如何讀取我從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: Expected BEGIN_OBJECT 但在第 1 行第 3 列路徑 $ 處是 NAME。

我的聯系人列表 class 這樣我就無法讀取 object。

 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;
        }
    }

這是一個解決方法,但是您需要為您擁有的每個 object 設置 go 並手動添加它,因為您不知道 object 名稱。

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);
    }

我想你可以用這個! 我希望你能運行它!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM