Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在flatter中解码JSON?_Json_Flutter_Parsing_Dart_Decode - Fatal编程技术网

如何在flatter中解码JSON?

如何在flatter中解码JSON?,json,flutter,parsing,dart,decode,Json,Flutter,Parsing,Dart,Decode,如何在flatter中解码JSON 问题很简单,但答案并不简单,至少对我来说是这样 我有一个使用大量JSON字符串的项目。基本上,应用程序和服务器之间的整个通信都是通过JSON进行的 我一直在使用JSON.decode(JSON\u string)来处理它,但是今天我更新了flift核心(0.5.8-pre.178),JSON.decode不再可用 我去了网站寻求帮助,但它仍然说要使用JSON.decode 那么,从现在开始,如何在flatter中解码JSON呢?只需使用 json.decode

如何在flatter中解码JSON

问题很简单,但答案并不简单,至少对我来说是这样

我有一个使用大量JSON字符串的项目。基本上,应用程序和服务器之间的整个通信都是通过JSON进行的

我一直在使用
JSON.decode(JSON\u string)
来处理它,但是今天我更新了flift核心(0.5.8-pre.178),JSON.decode不再可用

我去了网站寻求帮助,但它仍然说要使用JSON.decode

那么,从现在开始,如何在flatter中解码JSON呢?

只需使用

json.decode()

在Dart 2中,所有尖叫案例常量都更改为较低的camel案例


确保
导入'dart:convert'

您需要导入
dart:convert

import 'dart:convert';
内联示例
String rawJson='{“name”:“Mary”,“age”:30}';
Map Map=jsonDecode(rawJson);//导入“dart:convert”;
字符串名称=映射['name'];
int age=map['age'];
人员=人员(姓名、年龄);
注意:在服务器端Dart的VS代码中执行此操作时,我必须指定类型:

Map<String, dynamic> map = jsonDecode(rawJson) as Map<String, dynamic>;
Map Map=jsonDecode(rawJson)作为Map;
模型类示例 模型类包括映射转换逻辑:

class Person {
  String name;
  int age;
  Person(this.name, this.age);

  // named constructor
  Person.fromJson(Map<String, dynamic> json)
      : name = json['name'],
        age = json['age'];

  // method
  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'age': age,
    };
  }
 
}
班级人员{
字符串名;
智力年龄;
人(这个名字,这个年龄);
//命名构造函数
Person.fromJson(映射json)
:name=json['name'],
age=json['age'];
//方法
映射到JSON(){
返回{
“名称”:名称,
“年龄”:年龄,
};
}
}
JSON转换是这样完成的:

String rawJson = '{"name":"Mary","age":30}';
Map<String, dynamic> map = jsonDecode(rawJson);
Person person = Person.fromJson(map);
String rawJson='{“name”:“Mary”,“age”:30}';
Map Map=jsonDecode(rawJson);
Person=Person.fromJson(map);
请看我的完整答案

生成序列化代码 编写序列化代码时很容易出错,因此Dart团队通常建议使用该包。但是,您可以了解不同方法的优缺点

如果你想要更多的选择,你也可以查看包

另见

您需要使用
导入'dart:convert'

解码:
JsonDecoder().convert($response”)

编码:
JsonEncoder().convert(对象)


对于像这样的Json解码

{
"id":"xx888as88",
"timestamp":"2020-08-18 12:05:40",
"sensors":[
    {
     "name":"Gyroscope",
     "values":[
         {
          "type":"X",
          "value":-3.752716,
          "unit":"r/s"
         },
         {
           "type":"Y",
           "value":1.369709,
           "unit":"r/s"
         },
         {
           "type":"Z",
           "value":-13.085,
           "unit":"r/s"
         }
       ]
    }
  ]
}
我这样做:

void setReceivedText(String text) {
    Map<String, dynamic> jsonInput = jsonDecode(text);
    
    _receivedText = 'ID: ' + jsonInput['id'] + '\n';
    _receivedText += 'Date: ' +jsonInput['timestamp']+ '\n';
    _receivedText += 'Device: ' +jsonInput['sensors'][0]['name'] + '\n';
    _receivedText += 'Type: ' +jsonInput['sensors'][0]['values'][0]['type'] + '\n';
    _receivedText += 'Value: ' +jsonInput['sensors'][0]['values'][0]['value'].toString() + '\n';
    _receivedText += 'Type: ' +jsonInput['sensors'][0]['values'][1]['type'] + '\n';
    _receivedText += 'Value: ' +jsonInput['sensors'][0]['values'][1]['value'].toString() + '\n';
    _receivedText += 'Type: ' +jsonInput['sensors'][0]['values'][2]['type'] + '\n';
    _receivedText += 'Value: ' +jsonInput['sensors'][0]['values'][2]['value'].toString();
     _historyText = '\n' + _receivedText;
}
void setReceivedText(字符串文本){
Map jsonInput=jsonDecode(文本);
_receivedText='ID:'+jsonInput['ID']+'\n';
_receivedText+='Date:'+jsonInput['timestamp']+'\n';
_receivedText+='设备:'+jsonInput['sensors'][0]['name']+'\n';
_receivedText+='类型:'+jsonInput['sensors'][0]['values'][0]['Type']+'\n';
_receivedText+='值:'+jsonInput['sensors'][0]['values'][0]['Value'].toString()+'\n';
_receivedText+='类型:'+jsonInput['sensors'][0]['values'][1]['Type']+'\n';
_receivedText+='值:'+jsonInput['sensors'][0]['values'][1]['Value'].toString()+'\n';
_receivedText+='类型:'+jsonInput['sensors'][0]['values'][2]['Type']+'\n';
_receivedText+='值:'+jsonInput['sensors'][0]['values'][2]['Value'].toString();
_historyText='\n'+\u receivedText;
}

我是新加入flatter的,所以,现在请为我工作。

有几种不同的方法可以解析JSON代码。以下是两个小例子: JSON只是大多数RESTAPI用来返回数据的文本格式

Dart内置了对JSON解析的支持。给定一个字符串,您可以使用
dart:convertlibrary
并将JSON(如果JSON有效)转换为带有字符串键和动态对象的映射。您可以直接解析JSON并使用映射,也可以解析JSON并将其放入类型化对象中,这样您的数据就具有更多的结构,并且更易于维护

假设我们需要解析此JSON数据:

final jsonData = {
  "name": "John",
  "age": 20
}
注意:
使用json.decode(jsonData)
将json字符串转换为映射

直接解析和使用

您可以使用
dart:convert
库手动解析JSON字符串

var parsedJson = json.decode(jsonData);
print('${parsedJson.runtimeType} : $parsedJson');

//The code above will give you
_InternalLinkedHashMap<String, dynamic> : {name: John, age: 20}
这看起来并不难,但如果您开始使用复杂的JSON字符串,编写和维护就会变得非常乏味

解析JSON对象

我们创建一个学生类并进行解析,将解码后的JSON传递给工厂构造函数:

class Student {
  final String name;
  final int age;

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

  factory Student.fromJson(Map<String, dynamic> json) {
    return Student(name: json['name'], age: json['age']);
  }

  // Override toString to have a beautiful log of student object
  @override
  String toString() {
    return 'Student: {name = $name, age = $age}';
  }
}
测试一下

void main(List<String> args) {
  testParseJsonObject();
}

// Output
Student: {name = John, age = 20}
void main(列表参数){
testParseJsonObject();
}
//输出
学生:{name=John,age=20}

Ans from:

您可以解码JSON
字符串
列表
直接映射到对象或对象列表

这可以通过包
json\u helpers
实现

import'包:json_helpers/json_helpers.dart'

例如,只需调用一个方法,就可以将请求(
request.body
)的
字符串
结果直接转换为对象列表,而无需太多麻烦

详细示例:

String
to
Post

final text='{“title”:“Hello”};
final post=text.json((e)=>post.fromJson(e));
印刷品(职位名称);
字符串
列表

final text='[{“title”:“Hello”},{“title”:“再见”}];
final post=text.jsonList((e)=>post.fromJson(e));
打印(帖子[0]。标题);
Map
to
Post

final map={“title”:“Hello”};
final post=map.json((e)=>post.fromJson(e));
印刷品(职位名称);
列表
列表

final list=[{“title”:“Hello”},{“title”:“再见”}];
final post=list.json((e)=>post.fromJson(e));
打印(帖子[0]。标题);
import 'dart:convert';

void testParseJsonDirect() {
  var name = parsedJson['name'];
  var age = parsedJson['age'];
  print('$name is $age');
}
class Student {
  final String name;
  final int age;

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

  factory Student.fromJson(Map<String, dynamic> json) {
    return Student(name: json['name'], age: json['age']);
  }

  // Override toString to have a beautiful log of student object
  @override
  String toString() {
    return 'Student: {name = $name, age = $age}';
  }
}
void testParseJsonObject() {
  final jsonString = r'''
      {
        "name": "John",
        "age": 20
      }
  ''';

  // Use jsonDecode function to decode the JSON string
  // I assume the JSON format is correct 
  final json = jsonDecode(jsonString);
  final student = Student.fromJson(json);

  print(student);
}
void main(List<String> args) {
  testParseJsonObject();
}

// Output
Student: {name = John, age = 20}