【问题标题】:How to create a JSONArray that contains Javascript code inside Java?如何在 Java 中创建包含 Javascript 代码的 JSONArray?
【发布时间】:2013-02-25 11:37:19
【问题描述】:

我正在创建一个 JSONArray 并将其解析为字符串,但由于它甚至包含字符串而不是代码,因此它不会按照我的需要输出。

for(Place place: places){
    locations.put("new google.maps.LatLng("+place.getContactData().getLatitude()+","+place.getContactData().getLongitude()+")");
}
return locations.toString();

它输出为:["new google.maps.LatLng(53.5608,9.96357)","new google.maps.LatLng(53.5608,9.96357)"],但我需要它不带 [new google.maps.LatLng(53.5608,9.96357),new google.maps.LatLng(53.5608,9.96357)] 这样的引号才能被 javascript 正确解释。

【问题讨论】:

  • [new google.maps.LatLng(53.5608,9.96357),new google.maps.LatLng(53.5608,9.96357)] 是否会成为 JSON 本身的字符串?因为如果不是,那么它就是无效的 JSON。
  • JSON 数据结构中没有代码,格式根本不支持。
  • 好的,我明白了。谢谢!

标签: java javascript json


【解决方案1】:

另一种方法是:

创建一个仅包含坐标的数组:

for(Place place: places){
    JSONObject obj = new JSONObject();
    obj.put("lat",place.getContactData().getLatitude());
    obj.put("lng",place.getContactData().getLongitude());
    locations.put(obj);
}

然后在javascript中:

var places = (yourPlacesJson);
var placeObjects = [];

for(var i=0;i<places.length;i++)
{
    placeObjects[placeObjects.length] = new google.maps.LatLng(places[i].lat,places[i].lng);
}

【讨论】:

  • 听起来很聪明。在源代码中,数组显示为var places = [{"lng":9.963569641113281,"lat":53.56079864501953},{"lng":9.979949951171875,"lat":53.55149841308594}];,但当我alert(places) 时,它是空的。我可能错过了什么?
  • @Lester:没有足够的信息来回答这个问题。也许你打电话给alert(places),而places 是不可见的。请注意,如果您得到输出[object Object],[object Object],那是完全正常的。
  • 现在可以完美运行了。也许只是一些浏览器缓存问题。 :) 非常感谢所有回复!
【解决方案2】:

JSON 仅支持普通旧数据。它不能包含任何可执行代码(new 是可执行代码)。这是设计使然 - 当 JSON 能够包含可执行代码时,您必须更加小心地从不受信任的来源导入 JSON。

您所能做的就是将 javascript 代码作为字符串传递,并在解析 JSON 后在 JS 端传递eval()

【讨论】:

    【解决方案3】:

    如果您将 json 解析为另一种语言,您也可以使用正则表达式删除“”

    【讨论】:

      【解决方案4】:

      我有一个类似的问题,我做这个工作的方式:

      不是在json转换之前写javascript,而是插入一个占位符。

      locations.put("%mapsPlaceholder1%");
      

      然后在用占位符填充数组后,执行:

      locations.toString().replaceFirst("\"%mapsPlaceholder1%\"","yourJsCode");
      

      类似的东西

      你也可以手动创建数组字符串

      【讨论】:

      • 是的,这是一个不错的方法。我只是想不出一种方法来为整个列表 places 做到这一点。
      • 我认为解决您的问题的更好方法是:只需将坐标添加到数组中,然后通过遍历数组在 javascript 中创建 google.maps.LatLng 对象
      • 听起来不错的计划 b。谢谢!
      • 看看我的第二个答案,我会这样做
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多