逗号分隔符解析JSON字符串

时间:2020-02-28 02:45:07

标签: json parsing flutter dart

我有一些字符串需要分隔为“纬度”和“经度”以获取LatLng,但是,不知道如何通过定界符分隔以将其提取。

字符串为:{location: 40.748817,-73.985428}

我需要将其分为Lat和lng来创建标记,并且不知道如何

3 个答案:

答案 0 :(得分:1)

尝试一下!

//If String
    String location = 'location: 40.748817,-73.985428';
     List<String> latAndLong =
        location.replaceFirst(' ', '').replaceAll('location:', '').split(',');
    LatLng latLng = new LatLng(double.parse(latAndLong[0]),double.parse(latAndLong[1]));

    //If Map/JSON
    var location2 = {'location': '40.748817,-73.985428'};
    String locationExtracted = location2['location'].toString();
    List<String> latAndLong2 =
        locationExtracted.replaceFirst(' ', '').replaceAll('location:', '').split(',');
    LatLng latLng2 = new LatLng(double.parse(latAndLong2[0]),double.parse(latAndLong2[1]));

答案 1 :(得分:1)

根据实际的输入格式,它可能会更容易或更难。

如果输入实际上是格式为{"location": "40.748817,-73.985428"}的JSON映射,则只需先将其解析为JSON,然后以逗号分隔字符串即可:

List<double> parseCoordinates(String source) {
  var parts = jsonParse(source)["location"]?.split(",");
  if (parts == null || parts.length != 2) {
    throw FormatException("Not valid location coordinates", source);
  }
  return [double.parse(parts[0], double.parts[1])];
}

如果输入实际上是格式为{location: 40.748817,-73.985428}的字符串(不是有效的JSON),那么看起来实际上是最容易用RegExp解决的问题。

示例:

final _coordRE = RegExp(r"^\{location: (-?\d+(?:.\d+)), (-?\d+(?:.\d+))\}$");
List<double> parseCoordinates2(String source) {
  var match = _coordRE.firstMatch(source);
  if (match == null) throw FormatException("Not valid coordinates", source);
  return [double.parse(match[1]), double.parse(match[2])];
}

,然后将其用作

var coords = parseCoordinates(source);
var lat = coords[0];
var lng = coords[1];

或者,由于您非常精确地了解格式,因此您可以自己提取子字符串,而不必使用RegExp:

List<double> parseCoordinates(String source) {
  var prefix = "{location: ";
  if (source.startsWith(prefix) && source.endsWith("}")) {
    var commaIndex = source.indexOf(",", prefix.length);
    if (commaIndex >= 0) {
      var lat = double.parse(source.substring(prefix.length, commaIndex));
      var lng = double.parse(source.substring(commaIndex + 1, source.length - 1));
      return [lat, lng];
    }
  }
  throw FormatException("Not valid coordinates", source);
}

如果格式变化幅度超出示例(也许以-.5作为坐标,而没有前导0),则必须调整正则表达式。一种选择是让捕获组仅捕获[-.\d]+并依靠双重解析器来处理语法错误。

答案 2 :(得分:0)

您是否尝试过功能jsonDecode?它会返回动态信息。

var coordinate = jsonDecode('[your json string]');

print(coordinate['location']);

然后剩下的就是使用split()函数将其拆分为令牌。 祝你好运。