首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析嵌套JSON提供未处理的异常

解析嵌套JSON提供未处理的异常
EN

Stack Overflow用户
提问于 2022-05-14 21:41:29
回答 1查看 22关注 0票数 1

我试图解析复杂的嵌套JSON,我有多个类来处理JSON嵌套。我在找这个JSON的号码

代码语言:javascript
复制
{
  "data": {
    "attributes": {
      "last_analysis_stats": {
        "harmless": 81,
        "malicious": 2,
        "suspicious": 0
      }
    }
  }
}

但是每当我解析它时,我就会得到错误“未处理的异常:输入'_InternalLinkedHashMap‘不是’Data‘类型的子类型”。

我正在使用的代码如下

代码语言:javascript
复制
_GoneSmishinState goneSmishinStateFromJson(String str) => _GoneSmishinState.fromJson(json.decode(str));
String goneSmishinStateToJson(_GoneSmishinState data) => json.encode(data.toJson());


String url = "https://urlhaus-api.abuse.ch/v1/urls/recent/"; //address for URL file

int harmless = 0;

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 Data {
  late Attributes attributes;

  Data.fromJson(Map<String, dynamic> json)
      : attributes = Attributes.fromJson(json["attributes"]);

  Map<String, dynamic> toJson() => {
    "attributes": attributes.toJson(),
  };
}

class Attributes {
  late LastAnalysisStats lastAnalysisStats;

  Attributes.fromJson(Map<String, dynamic> json)
      : lastAnalysisStats= LastAnalysisStats.fromJson(json["last_analysis_stats"]);

  Map<String, dynamic> toJson() => {
    "last_analysis_stats": lastAnalysisStats.toJson(),
  };
}

class LastAnalysisStats {
  late int harmless;
  late int malicious;
  late int suspicious;

  LastAnalysisStats.fromJson(Map<String, dynamic> json)
      : harmless= json["harmless"],
        malicious= json["malicious"],
        suspicious= json["suspicious"];

  Map<String, dynamic> toJson() => {
    "harmless": harmless,
    "malicious": malicious,
    "suspicious": suspicious,
  };
}



String message = "";
String word = "";
bool isOn = false;

@override
void dispose() {
  myController.dispose();
  //super.dispose();
}
var data = '';

var attributes = '';


String virusTotal = "VirusTotal";
String list = "Whitelist";



final myController = TextEditingController();


class GoneSmishin extends StatefulWidget {
  const GoneSmishin({Key? key}) : super(key: key);

  @override
  _GoneSmishinState createState() => _GoneSmishinState();
}


class _GoneSmishinState extends State<GoneSmishin> {
  _GoneSmishinState({Key? key}) : super();
  late Data data;
  _GoneSmishinState.fromJson(Map<String, dynamic> json)
      : data= Data.fromJson(json["data"]);

  Map<String, dynamic> toJson() => {
    "data": data.toJson(),
  };
  urlHausParseBox() async {
    String url = myController.text;
    var urlEncoded = base64.encode(utf8.encode(myController.text));
    var urlNoPadding = urlEncoded.replaceAll(new RegExp(r'='), '');

    final response2 = await http.get(
      Uri.parse("https://www.virustotal.com/api/v3/urls/$urlNoPadding"),
      headers: <String, String>{
        'Accept': 'application/json',
        'x-apikey': '11111111111111111111111111111111'
      },
    );

    print(urlEncoded);
    print(response2.body);

    if (response2.statusCode == 200) {
      setState(() {
        final decoded = json.decode(response2.body);
        data = decoded['data'];
});

    if ((data.attributes.lastAnalysisStats.malicious + data.attributes.lastAnalysisStats.suspicious)>= 2) {
      setState(() {
        virusTotal = 'Found in VirusTotal - Possibly Malicious';
      });
    } else
    if ((data.attributes.lastAnalysisStats.suspicious + data.attributes.lastAnalysisStats.suspicious) <= 1) {
      setState(() {
        virusTotal = 'Found in VirusTotal - Probably not Malicious';
        print((data.attributes.lastAnalysisStats.suspicious + data.attributes.lastAnalysisStats.suspicious));
      });
    } else {
      setState(() {
        virusTotal = 'Not found in VirusTotal';
      });
    }
EN

回答 1

Stack Overflow用户

发布于 2022-05-14 22:05:05

试着修改这段代码

代码语言:javascript
复制
   setState(() {
        final decoded = json.decode(response2.body);
        data = decoded['data'];
      });

代码语言:javascript
复制
 setState(() {
      final decoded = json.decode(response2.body);
          data = Data.fromJson(decoded['data']);
      });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72244051

复制
相关文章

相似问题

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