正则表达式:select [] 在字符串中的第一次和最后一次出现

Regex: select first and last occurence of [] in a String

我正在尝试自动更改 GeoJSON 消息中的坐标:

{
    "type" : "Feature",
    "properties" : {},
    "geometry" : {
        "type" : "LineString",
        "coordinates" : [
            [
                4.399842023849487,
                51.97148460936231
            ],
            [
                4.386194944381714,
                52.003202463721045
            ]
        ]
    }
}

为此,我正在寻找一种方法来 select 第一个坐标对 ( 4.399842023849487,51.97148460936231) 和最后一个 ( 4.386194944381714,52.003202463721045)。在这种情况下,只有两对,但正则表达式应该寻找最后一对。)。 随后,这 2 个 selected 字符串将被替换为我已经从另一个来源提取的 2 个坐标。

最 sturdy/robust 的方法是什么?正则表达式是要走的路吗?

编辑:

用 org.json 解析器解决了。

        JSONObject obj = new JSONObject(inputdata);
        JSONArray coordinateArr = obj.getJSONArray("coordinates");

        String firstOldCoordinate = coordinateArr.get(0).toString();
        String lastOldCoordinate = coordinateArr.get(1).toString();

        String newJSON = inputdata.replace(firstOldCoordinate, firstNewCoordinate).replace(lastOldCoordinate, lastNewCoordinate);

我不认为正则表达式是完成这一切的简洁有效的解决方案。相反,使用 jQuery.parseJSON() 是最好的方法。查看下面的解决方案。这是 fiddle:http://jsfiddle.net/hacker1211/ewoma0tc/

    <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
var obj = jQuery.parseJSON( '{"type": "Feature","properties": {},"geometry": {"type": "LineString","coordinates": [[4.399842023849487,51.97148460936231],[4.386194944381714,52.003202463721045]]}}' );
obj.geometry.coordinates[0]=[7.399842023849487,60.97148460936231]; //your custom coordinates
obj.geometry.coordinates[obj.geometry.coordinates.length-1]=[7.399842023849487,60.97148460936231];//your custom coordinates
alert( obj.geometry.coordinates[0]);
alert( obj.geometry.coordinates[obj.geometry.coordinates.length-1]);

使用 jq (https://stedolan.github.io/jq) 可以使用以下 jq 过滤器完成任务:

.geometry.coordinates[0] = ["one", "two"]
| .geometry.coordinates[-1] = ["three", "four"]

用适当的值替换字符串的位置。

假设输入在名为 geojson.json 的文件中,并且以上两行在文件名 geojson.jq 中,这里是显示输出的抄本:

$ jq -f geojson.jq geojson.json
{
  "type": "Feature",
  "properties": {},
  "geometry": {
    "type": "LineString",
    "coordinates": [
      [
        "one",
        "two" 
      ],
      [
        "three",
        "four"
      ]
    ]
  }
}

以上假定jq版本为1.5(当前版本);对于 jq 1.4,程序将是以下三行:

(.geometry.coordinates|length -1 ) as $last
| .geometry.coordinates[0] = ["one", "two"]
| .geometry.coordinates[$last] = ["three", "four"]

程序也可以很容易地参数化。