json - 将数据添加到 dart 中的 json 文件
问题描述
我有一个
Json
文件,其中包含一些用户数据作为数组,我可以在我的颤振项目中读取这些数据,但我想做的是从我从textfield
颤振应用程序中收到的数据中添加一些其他用户。谁能告诉我该怎么做?提前致谢。
我的 Json 文件看起来像这样。
{
"users": [
{
"id": 1,
"username": "steve",
"password": "captainamerica"
}
]
}
我必须添加另一个用户,ID 为 2,用户名 -tony,密码 - Ironman。
解决方案
我尝试向您展示如何将 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;
}
}
推荐阅读
- python - python - 惩罚游戏如何加速元素
- mysql - Prem MySQL 和 Azure 数据存储之间的数据同步
- android - 将最大视图的左侧与约束布局对齐
- python - Jupyter Notebook 将目录/文件路径添加到 Windows 环境变量
- scilab - 更改 SCILAB 中的输出格式
- asp.net - 如何从 ASP.NET 中的静态文件返回响应?
- javascript - 在 CSS 中可能有这样的事情吗?
- python - 从 Wi-fi 路由器中提取特定的 MAC/IP 地址并将它们定向到 Raspberry Pi?
- unity3d - Android 设备监视器没有响应
- pharo - 如何覆盖数组的打印?