flutterdartdart-html

Dart Convert HTML to JSON


The official Turkey's Dictionary has some kind of json request system but the response it gave is HTML, not JSON.

Example:

https://sozluk.gov.tr/gts?ara=kalem

I'm trying to convert this HTML to JSON but couldn't make it. When I use html plugin on Flutter it gives me some kind of #document every time.

      var sozlukurl = await http.Client()
          .get(Uri.parse('https://sozluk.gov.tr/gts?ara=$ceviri'));
      print(sozlukurl);
      var sozlukapibody = parse(sozlukurl.body);
      print(sozlukapibody);
      var decoded = json.decode(sozlukapibody.toString());
      var sozlukbilgi = jsonDecode(utf8.decode(decoded.bodyBytes)) as Map;
      var sozlukanlam = sozlukbilgi['anlamlarListe'][0]['anlam'];
      print(sozlukanlam);

Output from sozlukurl:

I/flutter ( 5350): Instance of 'Response'

Output from sozlukapibody:

I/flutter ( 5350): #document

Final Error:

FormatException (FormatException: Unexpected character (at character 1)
#document
^
)

How can i solve this problem?


Solution

  • It returns a json with an array encapsulating it. For your particular example jsonDecode should work fine, just take index 0 of the array to access the json.

    var res = await http.Client()
              .get(Uri.parse('https://sozluk.gov.tr/gts?ara=kalem'));
      
    var body = res.body;
    var decoded = jsonDecode(body);
    var json = decoded[0];
    
    var sozlukanlam = json["anlamlarListe"][0]["anlam"];
    print(sozlukanlam);
    

    I tried it on DartPad and not on an actual app however.