如何在 Firebase 实时数据库中解码这个 json?

Posted

技术标签:

【中文标题】如何在 Firebase 实时数据库中解码这个 json?【英文标题】:How to decode this json in Firebase realtime Database? 【发布时间】:2020-12-09 02:54:37 【问题描述】:

void readData() 
            databaseReference
                .child("data")
                .child("chapters")
                .once()
                .then((DataSnapshot snapshot) 
              print('Data : $snapshot.value');
        
            );

这是我的读取数据函数,我得到了以下 JSON 输出。

[
          
            "name": "Global Village",
            "videolists": [
              
                "title": "Binary to decimal",
                "link": "http://..........",
                "duration": "5:3"
              ,
              
                "title": "Binary to decimal",
                "link": "http://..........",
                "duration": "5:3"
              
            ]
          ,
          
            "name": "Data Communication and Networking",
            "videolists": [
              
                "title": "Binary to decimal",
                "link": "http://..........",
                "duration": "5:3"
              ,
              
                "title": "Binary to decimal",
                "link": "http://..........",
                "duration": "5:3"
              
            ]
          
        ]

我已尝试使用此代码对 JSON 进行解码

var lists= json.decode(snapshot.value) as List;

但我遇到了这样的错误

未处理的异常:类型“列表”不是类型的子类型 '字符串'

如何解码 JSON?

【问题讨论】:

能否发布您想要的输出? @ Squ1rr3lz 我只想将 json 解码值作为列表存储在一个变量中。稍后我将使用它作为函数参数。 【参考方案1】:

您可以尝试以下方法:

 Iterable lists     = json.decode(result);
  List<dynamic> map = lists.toList();
  map.forEach((res)
    print(res["videolists"][0]);
  );

json.decode() 接受String 并返回dynamic,因此我们可以将其分配给Iterable 类,然后我们可以使用toList() 创建一个列表并使用forEach() 进行迭代。以上应该给你:

title: Binary to decimal, link: http://.........., duration: 5:3
title: Binary to decimal, link: http://.........., duration: 5:3

【讨论】:

我仍然面临这个错误“ [错误:flutter/lib/ui/ui_dart_state.cc(157)] 未处理的异常:类型 'List' 不是类型 'String' 的子类型"

以上是关于如何在 Firebase 实时数据库中解码这个 json?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firebase 实时数据库中删除一些数据?

Firebase 实时数据库:如何迭代每个键值

我如何从firebase实时数据库中获取所有数据

如何在 Firebase 实时数据库中存储浮点列表?

我应该如何在 Firebase 实时数据库中设置作为键值类型的 getter 和 setter?

Firebase 实时数据库每日签到 Android