我正在创建一个允许用户保存小数据的应用程序。我的资产文件夹中有一个 json 文件,我想创建一个可以向其中写入更多 json 数据的应用程序。路径:assets/vault.json
金库.json
[
{
"name":"Ash",
"age":"22",
"hobby" : "golf"
},
{
"name":"philip",
"age":"17",
"hobby" : "fishing"
},
{
"name":"charles",
"age":"32",
"hobby" : "drawing"
}
]
Run Code Online (Sandbox Code Playgroud)
但是我坚持向 json 文件添加更多列表。
在我的 main.dart 中,我创建了 3 个用于输入的文本字段和一个用于触发 writeToFile(arg1,arg2,arg3) 的按钮 onPress。
这是我尝试过的:
void writeToFile(String hobbyy, String agee, String namee) {
print("Writing to file!");
Map<String, dynamic> content = new Map();
content1 = {name: namee};
content2 = {age: agee};
content3 = {hobby: hobbyy};
content.addAll(content1);
content.addAll(content2);
content.addAll(content3);
print(content); //working fine
}
Future<String> _loadAVaultAsset() async {
return await rootBundle.loadString('assets/vault.json');
}
Future loadVault() async {
String jsonString = await _loadAVaultAsset();
final jsonResponse = json.decode(jsonString);
var add = jsonResponse.toString();
add = add.replaceFirst(new RegExp(r'}]'), "},"+content.toString()+"]");
print(add); //shows the full json string that I want.
//How to add/replace (add) into the json file?
}
Run Code Online (Sandbox Code Playgroud)
虽然我得到了我想要的 json 字符串,但我无法在 json 文件中反映它。
这是我的 vault_model.dart(以防万一):
class UsersList{
final List<Users> user;
UsersList({
this.user,
});
factory UsersList.fromJson(List<dynamic> parsedJson){
List<Users> entireList = new List<Users>();
entireList = parsedJson.map((i)=>Users.fromJson(i)).toList();
return UsersList(
user: entireList,
);
}
}
class Users{
final String name;
final String age;
final String hobby;
Users({
this.name,
this.age,
this.hobby
});
factory Users.fromJson(Map<String, dynamic> json){
return new Users(
name: json['name'],
age: json['age'],
hobby: json['hobby'],
);
}
}
Run Code Online (Sandbox Code Playgroud)
请教我如何在assets/vault.json 路径中用新字符串(添加)替换旧的json 字符串。
由于您无法在运行时写入资产中的文件,如前所述,请将其存储在本地计算机的其他位置。以下代码可以从json文件中读取并写入 -
import 'dart:io';
import 'dart:convert';
List<Player> players = [];
void main() async{
print("hello world");
final File file = File('D:/Sadi/../vault.json'); //load the json file
await readPlayerData(file); //read data from json file
Player newPlayer = Player( //add a new item to data list
'Samy Brook',
'31',
'cooking'
);
players.add(newPlayer);
print(players.length);
players //convert list data to json
.map(
(player) => player.toJson(),
)
.toList();
file.writeAsStringSync(json.encode(players)); //write (the whole list) to json file
}
Future<void> readPlayerData (File file) async {
String contents = await file.readAsString();
var jsonResponse = jsonDecode(contents);
for(var p in jsonResponse){
Player player = Player(p['name'],p['age'],p['hobby']);
players.add(player);
}
}
class Player {
late String name;
late String age;
late String hobby;
Player(
this.name,
this.age,
this.hobby,
);
Player.fromJson(Map<String, dynamic> json) {
name = json['name'];
age = json['age'];
hobby = json['hobby'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['name'] = this.name;
data['age'] = this.age;
data['hobby'] = this.hobby;
return data;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23870 次 |
| 最近记录: |