首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析嵌套的JSON会导致fromJson方法具有“类‘数据’没有未命名的构造函数”。错误

解析嵌套的JSON会导致fromJson方法具有“类‘数据’没有未命名的构造函数”。错误
EN

Stack Overflow用户
提问于 2022-05-14 12:19:31
回答 1查看 50关注 0票数 0

因此,我试图解析来自VirusTotal的GET请求的嵌套JSON,但是当我创建用于解析JSON的方法时,我正在寻找的是,它在=>后面的工厂方法上给了我一个错误。我使用了工具https://app.quicktype.io/来获得这个方法,但它似乎仍然不起作用。我要解析的JSON看起来是这样的,代码在下面。

代码语言:javascript
复制
{
  "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';
      });
    }
EN

回答 1

Stack Overflow用户

发布于 2022-05-14 12:52:25

你能试着像这样使用json模型吗?

代码语言:javascript
复制
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,
    };
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72240119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档