json解析动态键值的flutter问题

Siv*_* KS 6 json dart flutter

以下是我的 JSON 的输出

{
    "success": true,
    "data": {
        "ones": [{
                "id": "2",
                "username": "LM10002"
            },
            {
                "id": "6",
                "username": "LM10006"
            }
        ],
        "twos": [{
                "id": "3",
                "username": "LM10003"
            },
            {
                "id": "8",
                "username": "LM10008"
            }
        ],
        "threes": [{
            "id": "4",
            "username": "LM10004"
        }],
        "fours": [{
                "id": "5",
                "username": "LM10005"
            },
            {
                "id": "14",
                "username": "GT10014"
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的键ones, twos, threes, fours是我尝试解析并能够获取的值的动态键值

  DownLineModel({this.success, this.data});
  DownLineModel.fromJson(Map<String, dynamic> json) {
    success = json['success'];
    data = json['data'];
    print(data);
Run Code Online (Sandbox Code Playgroud)

我如何解析 json 并找到关键术语并再次解析它。

Sag*_*rya 5

只需查看我根据您提供的 json 为您制作的示例即可。

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:json_parsing_example/models.dart';
import 'package:http/http.dart' as http;

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: HomePage());
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  double value;

  String json = '''
  {
    "success": true,
    "data": {
        "ones": [{
                "id": "2",
                "username": "LM10002"
            },
            {
                "id": "6",
                "username": "LM10006"
            }
        ],
        "twos": [{
                "id": "3",
                "username": "LM10003"
            },
            {
                "id": "8",
                "username": "LM10008"
            }
        ],
        "threes": [{
            "id": "4",
            "username": "LM10004"
        }],
        "fours": [{
                "id": "5",
                "username": "LM10005"
            },
            {
                "id": "14",
                "username": "GT10014"
            }
        ]
    }
}
  
  ''';
  @override
  void initState() {
    super.initState();

    getData();
  }

  getData() {
    Map mapValue = jsonDecode(json);
    // This is where you iterate via the data object
    // that is the value which is key,value pair
    List<Data> data = List();
    mapValue['data'].forEach((key, value) {
      List<User> user = List();
      value.forEach((item) {
        user.add(User(id: item['id'], username: item['username']));
      });
      data.add(Data(name: key, userList: user));
    });

    data.forEach((element) {
      print(element.name + " : " + '${element.userList.length}');
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(child: Text('s')),
    );
  }
}

class Data {
  final String name;
  final List<User> userList;

  Data({this.name, this.userList});
}

class User {
  final String id;
  final String username;

  User({this.id, this.username});
}

Run Code Online (Sandbox Code Playgroud)

让我知道它是否有效。