带有JavaScript对象的PHP数组到JavaScript


PHP array with JavaScript objects to JavaScript

如果我在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.397150.644)"周围加了引号。

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

因此,你必须通过两个步骤来完成这一点:

  1. 您可以在另一个用于JSON:的PHP array中包含所需的值

    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);
    

    而且,如果数据中有许多这样的对象的示例,您可以指定一个reviver 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在"array"类型之间的区别比PHP更强。

  • "关联"PHP中的array s在JSON和JavaScript中变为Object s
  • "非关联"PHP中的array s在JSON和JavaScript中变为Array s