skip to Main Content

I have the following problem, I’m new in Dart, and I’m using a Future to construct a list view from a JSON response of an API, once I do this request, I receive the following response:

REQUEST:

Future<List<Job>> _fetchJobs() async {
    final response = await http.get(
        Uri.parse('http://10.10.10.254/httpapi.asp?command=wlanGetApListEx'));
    if (response.statusCode == 200) {
      final List jsonResponse = json.decode(response.body)['aplist'] as List;
     print(jsonResponse);
      return jsonResponse.map((job) => new Job.fromJson(job)).toList();
    } else {
      throw Exception('Failed to load jobs from API');
    }
  }
   [
   {
      "ssid":444A446F626C65615F322E34,
      "bssid":"80":"3f":"5d":"ed":"cd":f9,
      "rssi":42,
      "channel":8,
      "auth":WPA2PSK,
      "encry":"AES",
      "extch":0
   },
   {
      "ssid":426172696369632D322E3447,
      "bssid":"b0":"76":"1b":"f4":"55":80,
      "rssi":18,
      "channel":1,
      "auth":WPA2PSK,
      "encry":"AES",
      "extch":0
   },
   {
      "ssid":46616D696C69615F65737061727A61,
      "bssid":"60":"32":"b1":"71":"ce":46,
      "rssi":0,
      "channel":5,
      "auth":WPA2PSK,
      "encry":"AES",
      "extch":0
   },
   {
      "ssid":43617361204C756369616E61,
      "bssid":"20":"ab":"48":"86":"17":58,
      "rssi":0,
      "channel":11,
      "auth":WPA2PSK,
      "encry":"AES",
      "extch":0
   }
]

As you can see, the SSID values are in HEX and I need it in UTF-16 or UTF-8

I was trying to implement the hex package, but I can not find how to implement it on a JSON array like this.

2

Answers


  1. Try the following code:

    import 'dart:convert';
    
    import 'package:convert/convert.dart';
    
    class Job {
      Job({required this.ssid, required this.auth, required this.encry});
    
      final String ssid;
      final String auth;
      final String encry;
    
      factory Job.fromJson(Map<String, dynamic> json) {
        return Job(
          ssid: utf8.decode(hex.decode(json['ssid'])),
          auth: json['auth'],
          encry: json['encry'],
        );
      }
    
      Map<String, dynamic> toMap() {
        return {
          'ssid': ssid,
          'auth': auth,
          'encry': encry,
        };
      }
    }
    

    final List<Map<String, dynamic>> jsonResponse = (json.decode(response.body)['aplist'] as List).map((e) => Job.fromJson(e)).map((e) => e.toMap()).toList();
    
    Login or Signup to reply.
  2. The hex codex is in the convert package (not to be confused with the dart built in convert library).

    If you need to convert the string you have to its ascii/utf8 form use both convert libraries like this:

    import 'dart:convert';
    
    import 'package:convert/convert.dart';
    
    void main() {
      final h = '444A446F626C65615F322E34';
      final u = utf8.decode(hex.decode(h));
      print(u); // prints DJDoblea_2.4
    }
    

    The more troubling issue seems to be that the data excerpt you provide is not valid JSON, so you cannot, of course, decode it with json.decode.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search