所以我试图从 VirusTotal 的 GET 请求中解析 Nested JSON 但是当我创建方法来解析 JSON 以查找我正在寻找的内容时,它在工厂方法之后立即给我一个错误=>。我使用工具 https://app.quicktype.io/ 来获取此方法,但它似乎仍然不起作用。我要解析的 JSON 看起来像这样,代码在下面。
{
"data": {
"attributes": {
"last_analysis_stats": {
"harmless": 81,
"malicious": 2,
"suspicious": 0
}
}
}
}
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:sms/sms.dart';
import 'package:http/http.dart' as http;
Future<void> main() async {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key:key);
@override
Widget build(BuildContext context) {
return const MaterialApp(
title: "Gone Smishin'",
home: GoneSmishin(),
);
}
}
class GoneSmishin extends StatefulWidget {
const GoneSmishin({Key? key}) : super(key: key);
State<GoneSmishin> createState() {
return _GoneSmishinState();
}
}
class Data {
late Attributes attributes;
factory Data.fromJson(Map<String, dynamic> json) => Data( // this is where the error appears in every method
attributes: Attributes.fromJson(json["attributes"]),
);
Map<String, dynamic> toJson() => {
"attributes": attributes.toJson(),
};
}
class Attributes {
late LastAnalysisStats lastAnalysisStats;
factory Attributes.fromJson(Map<String, dynamic> json) => Attributes(
lastAnalysisStats: LastAnalysisStats.fromJson(json["last_analysis_stats"]),
);
Map<String, dynamic> toJson() => {
"last_analysis_stats": lastAnalysisStats.toJson(),
};
}
class LastAnalysisStats {
static late int harmless;
static late int malicious;
static late int suspicious;
factory LastAnalysisStats.fromJson(Map<String, dynamic> json) => LastAnalysisStats(
harmless: json["harmless"],
malicious: json["malicious"],
suspicious: json["suspicious"],
);
Map<String, dynamic> toJson() => {
//"harmless": harmless,
"malicious": malicious,
"suspicious": suspicious,
};
}
class _GoneSmishinState extends State<GoneSmishin> {
late Data data;
String message = "";
String word = "";
bool isOn = false;
final myController = TextEditingController();
@override
void dispose() {
myController.dispose();
super.dispose();
}
var queryStatus = '';
var urlStatus = '';
var attributes = '';
String urlHaus = "URLHaus";
String virusTotal = "VirusTotal";
String list = "Whitelist";
urlHausParseBox() async {
String url = myController.text;
var urlEncoded = base64.encode(utf8.encode(myController.text));
var urlNoPadding = urlEncoded.replaceAll(new RegExp(r'='), '');
// await VirusTotal().getUrlAnalysisReport(urlNoPadding);
final response2 = await http.get(
Uri.parse("https://www.virustotal.com/api/v3/urls/$urlNoPadding"),
headers: <String, String>{
'Accept': 'application/json',
'x-apikey': '111111111111111111111'
},
);
print(urlEncoded);
print(response2.body);
if (response2.statusCode == 200) {
setState(() {
final decoded = json.decode(response2.body);
data = decoded['data'];
});
}
if (queryStatus == "ok" && urlStatus == "online") {
print("found");
setState(() {
urlHaus = 'Found in URLHause Database - Probably Smishing';
});
} else if (queryStatus == "ok" && urlStatus == "offline") {
print("found offline");
setState(() {
urlHaus = 'Found in URLHaus, not online';
});
} else {
print("not found");
setState(() {
urlHaus = 'Found Nothing';
});
}
if (((LastAnalysisStats.suspicious) + (LastAnalysisStats.malicious)) >= 2) {
setState(() {
virusTotal = 'Found in VirusTotal - Possibly Malicious';
});
} else
if (((LastAnalysisStats.suspicious) + (LastAnalysisStats.malicious)) <= 1) {
setState(() {
virusTotal = 'Found in VirusTotal - Probably not Malicious';
print((LastAnalysisStats.suspicious) + (LastAnalysisStats.malicious));
});
} else {
setState(() {
virusTotal = 'Not found in VirusTotal';
});
}
回答1
您可以尝试像这样使用 json 模型吗?
import 'dart:convert';
Model modelFromJson(String str) => Model.fromJson(json.decode(str));
String modelToJson(Model data) => json.encode(data.toJson());
class Model {
Model({
this.data,
});
Data data;
factory Model.fromJson(Map<String, dynamic> json) => Model(
data: Data.fromJson(json["data"]),
);
Map<String, dynamic> toJson() => {
"data": data.toJson(),
};
}
class Data {
Data({
this.attributes,
});
Attributes attributes;
factory Data.fromJson(Map<String, dynamic> json) => Data(
attributes: Attributes.fromJson(json["attributes"]),
);
Map<String, dynamic> toJson() => {
"attributes": attributes.toJson(),
};
}
class Attributes {
Attributes({
this.lastAnalysisStats,
});
LastAnalysisStats lastAnalysisStats;
factory Attributes.fromJson(Map<String, dynamic> json) => Attributes(
lastAnalysisStats: LastAnalysisStats.fromJson(json["last_analysis_stats"]),
);
Map<String, dynamic> toJson() => {
"last_analysis_stats": lastAnalysisStats.toJson(),
};
}
class LastAnalysisStats {
LastAnalysisStats({
this.harmless,
this.malicious,
this.suspicious,
});
int harmless;
int malicious;
int suspicious;
factory LastAnalysisStats.fromJson(Map<String, dynamic> json) => LastAnalysisStats(
harmless: json["harmless"],
malicious: json["malicious"],
suspicious: json["suspicious"],
);
Map<String, dynamic> toJson() => {
"harmless": harmless,
"malicious": malicious,
"suspicious": suspicious,
};
}