Flutter如何使用http.post并作为String Json对象发送

时间:2019-05-14 22:09:11

标签: json http post dart flutter

我正在尝试将json对象发送到api端点。但我得到以下信息:

I / flutter(28184): 200
I / flutter(28184): {"error": "the JSON object must be str, not 'bytes'"}

我尝试了以下方法:

Future<http.Response> sendPost() async{
    var post = {
      "profile_id" : "${_profile_id}",
      "profile_name" : "${_profile_Name}",
      "profile_country" : "${_profile_country}",
      "post_id" : "${current_post_id}",
      "post_image_id" : "${current_post_image}",
      "post_desc" : "La La La La La La",
      "post_likes" : "${post_likes}",
      "post_timestamp" : "05-06-2019 22:34",
      "post_comments" : [],
      "post_comments_profile_name" : [],
      "post_comments_profile_image_id" : [],
      "post_comments_timestamp" : []
    };


    var body = utf8.encode(json.encode(post));

    var addPost = await http.post(
      url,
      headers: {"content-type" : "application/json"},
      body: body
      
      );

      print("${addPost.statusCode}");
      print("${addPost.body}");
      return addPost;
  }

另外,当您回答时,请记住此Map内应该有空数组。

谢谢!

3 个答案:

答案 0 :(得分:0)

无需转换地图:

var body = utf8.encode(json.encode(post)); // delete this

只需将地图发送到人体,就像这样:

var addPost = await http.post(
    url,
    body: post
);

答案 1 :(得分:0)

为了将JSON发送到正文中,您应该对JSON进行字符串化。

var body = JSON.stringify(post);

我认为不需要编码。

答案 2 :(得分:0)

请勿使用utf8.encode()转换地图。 由于JSON对象必须是字符串而不是字节。 直接发送地图:

var addPost = await http.post(
    url,
    body: post
);

我从评论中了解到,您将来想检索字符串数组。 不用担心,可以轻松实现:

相同链接:Flutter how to convert String to List<String>