【问题标题】:How to print only the specific parts of values from the json map?如何仅打印 json 映射中值的特定部分?
【发布时间】:2021-04-13 21:31:20
【问题描述】:

我是 Flutter 的新手,我关注了 StackOverflow 上关于从 json 映射中检索数据的另一篇文章。它有效,但现在我只想从地图中访问我需要的数据。我也无法从地图中删除多余的数据,因为我需要相同的地图用于应用程序的另一部分。

这就是代码的样子。

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      localizationsDelegates: <LocalizationsDelegate<dynamic>>[
        DefaultMaterialLocalizations.delegate,
        DefaultWidgetsLocalizations.delegate,
        DefaultCupertinoLocalizations.delegate,
      ],
      theme: CupertinoThemeData(
        primaryColor: Color(0xffffffff),
      ),
      home: TransactionHistoryScreen(),
    );
  }
}

class TransactionHistoryScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      child: Scaffold(body: Container(child: MakeList(),),),
    );
  }
}

class MakeList extends StatelessWidget {
final List<Map<String, String>> json = [
  {"branch": "B1", "xyz": "0", "ABC": "2", "MN": "2"},
  {"branch": "B2", "xyz": "0", "ABC": "0", "MN": "0"},
  {"branch": "B3", "xyz": "1", "ABC": "1", "MN": "42"},
  {"branch": "B4", "xyz": "0", "ABC": "5", "MN": "69"},
];

@override
Widget build(BuildContext context) {
  return ListView.builder(
    itemCount: json.length,
    itemBuilder: (BuildContext context, int index) {
      return ListTileClass(jsonObject: json[index]);
    },
   );
  }
}

class ListTileClass extends StatefulWidget {
final Map<String, String> jsonObject;

ListTileClass({this.jsonObject});

@override
_ListTileClassState createState() => _ListTileClassState();
}

class _ListTileClassState extends State<ListTileClass> {
  @override
  Widget build(BuildContext context) {
    return ListTile(
      title: Container(
        child: Row(
          children: makeWidgetChildren(widget.jsonObject),
        ),
      ),
    );
  }

  List<Widget> makeWidgetChildren(jsonObject) {
    List<Widget> children = [];
    jsonObject.keys.forEach(
      (key) => {
        children.add(
          Padding(
              child: Text('${jsonObject[key]}'), padding: EdgeInsets.all(8.0)),
        ),
      },
    );
    return children;
  }
}

使用此代码,我可以打印地图每个键的值。如何访问特定密钥?例如,如何仅打印“分支”和“xyz”值?

【问题讨论】:

  • 我已经从标签中删除了 android studio,因为你的问题集中在颤振和(特别是)飞镖,我认为你使用的 IDE 在这里没有什么不同

标签: android flutter dart


【解决方案1】:

在许多情况下,您可以在 dart 中使用 forEach:

void main() {
  final List<Map<String, String>> json = [
  {"branch": "B1", "xyz": "0", "ABC": "2", "MN": "2"},
  {"branch": "B2", "xyz": "0", "ABC": "0", "MN": "0"},
  {"branch": "B3", "xyz": "1", "ABC": "1", "MN": "42"},
  {"branch": "B4", "xyz": "0", "ABC": "5", "MN": "69"},
];
  json.forEach((item) => print("Branch : ${item['branch']}, xyz : ${item['xyz']}"));
}

输出:

Branch : B1, xyz : 0
Branch : B2, xyz : 0
Branch : B3, xyz : 1
Branch : B4, xyz : 0

【讨论】:

  • 非常感谢您的回答!我试过这样做,但我得到了错误,type 'String' is not a subtype of type 'int' of 'index'
  • 如果你能帮我解决这个问题,我真的很感激 :)
  • 看来你的 JSON 和上面提到的不一样,请分享你的 JSON
  • 同上一个
  • 我可以通过将item 更改为jsonObject 来解决此问题。现在我无法仅打印一次值。现在每个值打印 4 次。如果我想获取分支值,B1, B2, B3, and B4 每次打印 4 次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 2012-02-24
  • 2022-01-21
  • 2022-01-03
  • 2015-07-06
相关资源
最近更新 更多