1

如果我在 JS 中有一个这样的数组:

{
 "car": "BMW",
 "count": 7 
}

我可以使用这个数组很容易地从 PHP 生成它:

array(
       'car' => 'BMW',
       'count' => 7,
)

和 json_encode。这不是问题。

但是如果我在 JS 中有一个这样的数组怎么办:

{
   "center": new google.maps.LatLng(-34.397, 150.644),
   "zoom": 8
}

还有一些不错的方法可以从 PHP 生成它吗?

上面的方法失败了,因为 JSON 在 "new google.maps.LatLng(-34.397, 150.644)" 周围加上了引号。

4

1 回答 1

2

JSON 不支持自定义类型。它只是用于传递数据并可供任何消费者使用,而google.maps.LatLng()不是真正的“数据”。

因此,您必须分两步完成此操作:

  1. 您可以在另一个 PHParray中为 JSON 包含所需的值:

    array(
        'center' => array(
            'lat' => -34.397,
            'lng' => 150.644
        ),
        'zoom' => 8
    )
    
    {
        "center": {
            "lat": -34.397,
            "lng": 150.644
        },
        "zoom": 8
    }
    
  2. 然后,一旦解析为 JavaScript Object,说data

    data.center = new google.maps.LatLng(data.center.lat, data.center.lng);
    

    而且,如果数据中有大量此类对象的示例,您可以指定areviver function来尝试识别它们并创建实例:

    // parse, creating `google.maps.LatLng` from any { lat: ..., lng: ..., ... }
    var data = JSON.parse(jsonString, function (key, value) {
        if (typeof value === 'object' && value.lat && value.lng) {
            return new google.maps.LatLng(value.at, value.lng);
        } else {
            return value;
        }
    });
    

    示例:http: //jsfiddle.net/XXbUU/


旁注:JSON 和 JavaScript 在“数组”类型之间的区别比 PHP 更强。

  • PHP中的“ Associative ”在 JSON 和 JavaScript 中变为 s。arrayObject
  • PHP中的“非关联”在 JSON 和 JavaScript 中变为 s。arrayArray
于 2013-07-31T00:06:26.587 回答