如何在 dart flutter 中将 json 字符串转换为 json 对象?

Ash*_*tav 25 json dart flutter

我有这样的字符串,

{id:1, name: lorem ipsum, address: dolor set amet}
Run Code Online (Sandbox Code Playgroud)

我需要将该字符串转换为 json,我如何在 dart flutter 中做到这一点?非常感谢你的帮助。

for*_*orJ 41

你必须使用json.decode. 它接受一个 json 对象并让您处理嵌套的键值对。我给你写个例子

import 'dart:convert';

// actual data sent is {success: true, data:{token:'token'}}
final response = await client.post(url, body: reqBody);

// Notice how you have to call body from the response if you are using http to retrieve json
final body = json.decode(response.body);

// This is how you get success value out of the actual json
if (body['success']) {
  //Token is nested inside data field so it goes one deeper.
  final String token = body['data']['token'];

  return {"success": true, "token": token};
}
Run Code Online (Sandbox Code Playgroud)

  • 但这并没有回答OP的问题。您刚刚解释了从实际 json 访问键值对的正确方法。 (5认同)

小智 10

创建模型类

class User {
  int? id;
  String? name;
  String? address;

  User({this.id, this.name, this.address});

  User.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    name = json['name'];
    address = json['address'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['id'] = this.id;
    data['name'] = this.name;
    data['address'] = this.address;
    return data;
  }
}
Run Code Online (Sandbox Code Playgroud)

在逻辑部分

    String data ='{id:1, name: lorem ipsum, address: dolor set amet}';

    var encodedString = jsonEncode(data);

    Map<String, dynamic> valueMap = json.decode(encodedString);
   
    User user = User.fromJson(valueMap);
Run Code Online (Sandbox Code Playgroud)

还需要导入

导入'dart:转换';


Par*_*iya 8

假设我们有一个简单的 JSON 结构,如下所示:

{
  "name": "bezkoder",
  "age": 30
}
Run Code Online (Sandbox Code Playgroud)

我们将创建一个User以字段命名的 Dart 类:name& age

class User {
  String name;
  int age;

  User(this.name, this.age);

  factory User.fromJson(dynamic json) {
    return User(json['name'] as String, json['age'] as int);
  }

  @override
  String toString() {
    return '{ ${this.name}, ${this.age} }';
  }
}
Run Code Online (Sandbox Code Playgroud)

您可以factory User.fromJson()在上面的代码中看到方法。它将动态对象解析为User对象。那么如何dynamic从 JSON 字符串中获取对象呢?

我们使用dart:convert库的内置jsonDecode()函数。

import 'dart:convert';

main() {
  String objText = '{"name": "bezkoder", "age": 30}';

  User user = User.fromJson(jsonDecode(objText));

  print(user);
Run Code Online (Sandbox Code Playgroud)

结果看起来像这样。

{ bezkoder, 30 }
Run Code Online (Sandbox Code Playgroud)

参考:Dart/Flutter 将 JSON 字符串解析为 Object


Moh*_*ami 7

您还可以将 JSON 数组转换为对象列表,如下所示:

String jsonStr = yourMethodThatReturnsJsonText();
Map<String,dynamic> d  = json.decode(jsonStr.trim());
List<MyModel> list = List<MyModel>.from(d['jsonArrayName'].map((x) => MyModel.fromJson(x)));
Run Code Online (Sandbox Code Playgroud)

MyModel这样的:

class MyModel{

  String name;
  int age;

  MyModel({this.name,this.age});

  MyModel.fromJson(Map<String, dynamic> json) {
    name= json['name'];
    age= json['age'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['name'] = this.name;
    data['age'] = this.age;

    return data;
  }
}
Run Code Online (Sandbox Code Playgroud)