如何在flatter中解码JSON?
如何在flatter中解码JSON 问题很简单,但答案并不简单,至少对我来说是这样 我有一个使用大量JSON字符串的项目。基本上,应用程序和服务器之间的整个通信都是通过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
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
toPost
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
toPost
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}