JSON-简单 java.lang.String 无法转换为 java.lang.Number

JSON-Simple java.lang.String cannot be cast to java.lang.Number

我正在尝试从此处看到的 json(作为双精度)获取 LAT/LNG 值:

{
    "placeNames": [
        {
            "name": "Test",
            "lat": "0",
            "lon": "0"
        },
        {
            "name": "Üsküdar Bağlarbaşı Yolu",
            "lat": "1",
            "lon": "2"
        },
        {
            "name": "Çamlıca",
            "lat": "3",
            "lon": "4"
        }
    ]
}

并在此处看到的 google 地图中的位置放置标记:

JSONParser jsonParser = new JSONParser();

try {
    JSONObject jsonObject = (JSONObject) jsonParser.parse(GetJson(getContext())); //TODO: READ JSON FILE
    JSONArray lang = (JSONArray) jsonObject.get("placeNames");
    for (int i = 0; i < lang.size(); i++) {
        JSONObject explrObject = (JSONObject) lang.get(i);
        String PlaceName = (String) explrObject.get("name");
        MarkerOptions marker3 = new MarkerOptions();
        Double LAT = ((Number) explrObject.get("lat")).doubleValue();
        Double LNG = ((Number) explrObject.get("lon")).doubleValue();
        marker3.position(new LatLng(LAT, LNG)).title(PlaceName);
    }
}

我遇到的问题是 LNG/LAT 值似乎以字符串形式出现,即使它们是我的 JSON 文件中的数字,我们将不胜感激。:)

也许你可以试试:

Double LAT = Double.parseDouble(explrObject.getString("lat"));

Double LAT = Double.parseDouble((String) explrObject.get("lat"));

以下是具有 double/ float 值的有效 JSON 语法,您可以使用这些值将 json 构造为,

{
    "placeNames":[
        {
            "name":"Test",
            "lat":29.470237,
            "lon":107.722125
        }
    ]
}

此外,如果有任何疑问,您可以参考此 website 在线验证您的 JSON 语法。而且,您上面的 JSON 解析器逻辑将处理此 JSON 数据。