首页 > 解决方案 > 将数据添加到 dart 中的 json 文件

问题描述

我的 Json 文件看起来像这样。

    {
    "users": [
        {
            "id": 1,
            "username": "steve",
            "password": "captainamerica"
        }
     ]
    }

我必须添加另一个用户,ID 为 2,用户名 -tony,密码 - Ironman。

标签: jsonflutterdart

解决方案


我尝试向您展示如何将 JSON 映射到 OBJECT,然后将新用户添加到users对象,然后再次添加到 JSON。

这是完整的代码:

如果您有任何疑问,请询问:

import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

UsersPodo _usersPodo; // Users object to store users from json

// A function that converts a response body into a UsersPodo
UsersPodo parseJson(String responseBody) {
  final parsed = json.decode(responseBody);
  return UsersPodo.fromJson(parsed);
}

class Demo extends StatefulWidget {
  @override
  _Demo createState() => _Demo();
}

class _Demo extends State<Demo> {
  final String localJson = '''
  {
    "users": [
        {
            "id": 1,
            "username": "steve",
            "password": "captainamerica"
        }
    ]
}'''; // local json string

  Future<UsersPodo> fetchJSON() async {
    return compute(parseJson, localJson);
  }

  Widget body() {
    return FutureBuilder<UsersPodo>(
      future: fetchJSON(),
      builder: (context, snapshot) {
        return snapshot.hasError
            ? Center(child: Text(snapshot.error.toString()))
            : snapshot.hasData
                ? _buildBody(usersList: snapshot.data)
                : Center(child: Text("Loading"));
      },
    );
  }

  Widget _buildBody({UsersPodo usersList}) {
    _usersPodo = usersList;

    _usersPodo.users.add(new Users(id: 1, username: "omishah", password: "somepassword")); // add new user to users array

    return Text(_usersPodo.users[1].toJson().toString()); // just for the demo output

    // use _usersPodo.toJson() to convert the users object to json
  }

  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Color(0xfff3f3f3),
        appBar: AppBar(backgroundColor: Colors.red[900], title: Text("DEMO")),
        body: body());
  }
}

// PODO Object class for the JSON mapping
class UsersPodo {
  List<Users> users;

  UsersPodo({this.users});

  UsersPodo.fromJson(Map<String, dynamic> json) {
    if (json['users'] != null) {
      users = new List<Users>();
      json['users'].forEach((v) {
        users.add(new Users.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.users != null) {
      data['users'] = this.users.map((v) => v.toJson()).toList();
    }
    return data;
  }
}

class Users {
  int id;
  String username;
  String password;

  Users({this.id, this.username, this.password});

  Users.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    username = json['username'];
    password = json['password'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['id'] = this.id;
    data['username'] = this.username;
    data['password'] = this.password;
    return data;
  }
}

推荐阅读