Dart:使用引用的所有元素将Map转换为JSON

时间:2015-03-27 05:38:30

标签: json spring-mvc dart jackson

我将Dart中的表单序列化为JSON,然后使用Jackson将其发布到Spring MVC后端,以反序列化JSON。

在飞镖中,如果我打印出JSON,我会得到:

{firstName: piet, lastName: venter}

杰克逊不喜欢这种格式的数据,它返回状态400和The request sent by the client was syntactically incorrect.

如果我在所有字段周围加上引号,杰克逊会接受这些数据,然后我会收到回复。

{"firstName": "piet", "lastName": "venter"}

在dart中,我构建了一个Map<String, String> data = {};,然后遍历所有表单字段并执行data.putIfAbsent(input.name, () => input.value);

现在当我打电话给data.toString()时,我得到了一个不带引号的JSON,我猜测它是无效的JSON。

如果我import 'dart:convert' show JSON;并尝试JSON.encode(data).toString();,我会得到相同的不带引号的JSON。

手动添加双引号似乎有效:

data.putIfAbsent("\"" + input.name + "\"", () => "\"" + input.value + "\"");

在Java方面,没有火箭科学:

@Controller
@RequestMapping("/seller")
@JsonIgnoreProperties(ignoreUnknown = true)
public class SellerController {

    @ResponseBody
    @RequestMapping(value = "/create", method = RequestMethod.POST, headers = {"Content-Type=application/json"})
    public Seller createSeller(@RequestBody Seller sellerRequest){

所以我的问题是,在Dart构建引用的JSON(除了手动转义引号和手动添加引号之外)是否有一种不太常见的方式,杰克逊期望? 杰克逊可以配置为允许不带引号的JSON吗?

3 个答案:

答案 0 :(得分:17)

import 'dart:convert'; json.encode(data)JSON.encode(data) Dart 1)始终为我引用了引用的JSON(您不需要致电toString()

答案 1 :(得分:5)

简单方法

import 'dart:convert';
Map<String, dynamic> jsonData = {"name":"vishwajit"};
print(JsonEncoder().convert(jsonData));

答案 2 :(得分:0)

如果数据内容是动态的,则以下功能可帮助在服务器上使用带引号的发送来发送JSON数据。此功能可以像在Dart中转换字符串一样使用。

导入内置的convert库,其中包括jsonDecode()jsonEncode()方法:

import 'dart:convert';   //Don't forget to import this

dynamic convertJson(dynamic param) {
  const JsonEncoder encoder = JsonEncoder();
  final dynamic object = encoder.convert(param);
  return object;
}

您会使用/称呼它

Future<dynamic> postAPICallWithQuoted(String url, Map param, BuildContext context) async {
  final String encodedData = convertJson(param);
  print("Calling parameters: $encodedData");
  var jsonResponse;
  try {
    final response =  await http.post(url,
        body: encodedData).timeout(const Duration(seconds: 60),onTimeout : () => throw TimeoutException('The connection has timed out, Please try again!'));
  } on SocketException {
    throw FetchDataException(getTranslated(context, "You are not connected to internet"));
  } on TimeoutException {
    print('Time out');
    throw TimeoutException(getTranslated(context, "The connection has timed out, Please try again"));
  }
  return jsonResponse;
}