【问题标题】:how to create a javascript object without double quotes on the property value如何在属性值上创建没有双引号的javascript对象
【发布时间】:2017-03-16 13:08:57
【问题描述】:

根据这些数据

[{"lat":"-1.325416","lng":"36.669051"},
 {"lat":"-1.392932","l‌​ng":"36.768752"},
 {"l‌​at":"-1.390505","lng‌​":"36.810023"},
 {"lat‌​":"-1.448266","lng":‌​"36.952769"},
 {"lat":‌​"-1.267033","lng":"3‌​7.094882"},
 {"lat":"-‌​1.214605","lng":"37.‌​053978"},
 {"lat":"-1.‌​169516","lng":"36.89‌​5608"}]

我正在尝试创建一个看起来像这样的 javascript 对象。

 var outerCoords =[
          {lat: -1.325416, lng: 36.669051},
          {lat: -1.392932, lng: 36.768752},
          {lat: -1.390505, lng: 36.810023},
          {lat: -1.448266, lng: 36.952769},
          {lat: -1.267033, lng: 37.094882},
          {lat: -1.214605, lng: 37.053978}, 
          {lat: -1.169516, lng: 36.895608},
          {lat: -1.244058, lng: 36.730391}
        ],

不带双引号的属性值。 我首先将我的 json 字符串化以获取一个字符串,然后从字符串中删除双引号,然后解析没有双引号的结果。解析结果不会创建对象,它会返回一个字符串。请如果你能帮助我将不胜感激。 这就是正在做的事情。

var str= JSON.stringify(outercords1); 
var x = str.replace (/"/g,'');
var obj= JSON.parse(x);

outercords 的值为:

[{"lat":"-1.325416","lng":"36.669051"},{"lat":"-1.392932","lng":"36.768752"},{"lat":"-1.390505","lng":"36.810023"},{"lat":"-1.448266","lng":"36.952769"},{"lat":"-1.267033","lng":"37.094882"},{"lat":"-1.214605","lng":"37.053978"},{"lat":"-1.169516","lng":"36.895608"}] 

【问题讨论】:

  • 请添加原始数据,你有。
  • JSON 需要双引号,少数数据类型除外,例如 Number 和 Bool。如果您正在解析对象,您将可以访问该值,不带引号。
  • 你能发布outercords1的值吗?
  • [{"lat":"-1.325416","lng":"36.669051"},{"lat":"-1.392932","lng":"36.768752"},{"lat ":"-1.390505","lng":"36.810023"},{"lat":"-1.448266","lng":"36.952769"},{"lat":"-1.267033","lng":" 37.094882"},{"lat":"-1.214605","lng":"37.053978"},{"lat":"-1.169516","lng":"36.895608"}]
  • 你确定它们是原始对象中的数字吗,因为如果它们是那么它们将不会被引用(只是测试过)

标签: javascript arrays json object


【解决方案1】:

字符串化 JSON 具有引用属性。这是强制性的。所以表单中的一个javascript对象

var outerCoords =[
      {lat: -1.325416, lng: 36.669051},
      {lat: -1.392932, lng: 36.768752},
      {lat: -1.390505, lng: 36.810023},
      {lat: -1.448266, lng: 36.952769},
      {lat: -1.267033, lng: 37.094882},
      {lat: -1.214605, lng: 37.053978}, 
      {lat: -1.169516, lng: 36.895608},
      {lat: -1.244058, lng: 36.730391}
    ],

将被字符串化为

'[{"lat":-1.325416,"lng":36.669051},{"lat":-1.392932,"lng":36.768752},{"lat":-1.390505,"lng":36.810023},{"lat":-1.448266,"lng":36.952769},{"lat":-1.267033,"lng":37.094882},{"lat":-1.214605,"lng":37.053978},{"lat":-1.169516,"lng":36.895608},{"lat":-1.244058,"lng":36.730391}]'

删除引号将使其无法被解析为 JSON,这就是你得到一个字符串的原因。

另一方面,表演

JSON.parse('[{"lat":-1.325416,"lng":36.669051},{"lat":-1.392932,"lng":36.768752},{"lat":-1.390505,"lng":36.810023},{"lat":-1.448266,"lng":36.952769},{"lat":-1.267033,"lng":37.094882},{"lat":-1.214605,"lng":37.053978},{"lat":-1.169516,"lng":36.895608},{"lat":-1.244058,"lng":36.730391}]');

会给你一个对象。开始时您手上的同一件物品。

对象属性总是被转换为字符串,所以将你的对象声明为

var outerCoords =[
  {"lat": -1.325416, "lng": 36.669051},
  {"lat": -1.392932, "lng": 36.768752},
  {"lat": -1.390505, "lng": 36.810023},
  {"lat": -1.448266, "lng": 36.952769},
  {"lat": -1.267033, "lng": 37.094882},
  {"lat": -1.214605, "lng": 37.053978}, 
  {"lat": -1.169516, "lng": 36.895608},
  {"lat": -1.244058, "lng": 36.730391}
];

和不带引号声明是一样的。

【讨论】:

    【解决方案2】:

    好吧,我认为不要使用 stringify 来解决您的问题,请按原样尝试。

    【讨论】:

    • 我试过不使用 stringify,如果我尝试访问对象 Object { lat: "-1.325416", lng: "36.669051" }
    • 现在像数组一样访问它,例如 object[0].lat 我不确定它是否有效
    • obj[0].lat "-1.325416" 这是输出
    • 好好检查一下,如果你使用 number(long) 来保存 lat 和 lag 会产生很大的不同,请将其作为数字添加到 json
    • 我使用了这个 json_encode($result,JSON_NUMERIC_CHECK);将纬度/经度转换为数字,效果很好
    【解决方案3】:

    var outerCoords =[
        {lat: -1.325416, lng: 36.669051},
        {lat: -1.392932, lng: 36.768752},
        {lat: -1.390505, lng: 36.810023},
        {lat: -1.448266, lng: 36.952769},
        {lat: -1.267033, lng: 37.094882},
        {lat: -1.214605, lng: 37.053978}, 
        {lat: -1.169516, lng: 36.895608},
        {lat: -1.244058, lng: 36.730391}
    ]
            
    var str= JSON.stringify(outerCoords); 
    //var x = str.replace (/"/g,'');
    var obj= JSON.parse(str);
    console.log(obj);

    【讨论】:

      【解决方案4】:

      您可以迭代数组和对象并将所有字符串数字转换为数字。

      根据JSON,键总是有双引号。

       var outerCoords = [{ "lat": "-1.325416", "lng": "36.669051" }, { "lat": "-1.392932", "lng": "36.768752" }, { "lat": "-1.390505", "lng": "36.810023" }, { "lat": "-1.448266", "lng": "36.952769" }, { "lat": "-1.267033", "lng": "37.094882" }, { "lat": "-1.214605", "lng": "37.053978" }, { "lat": "-1.169516", "lng": "36.895608" }];
      
      outerCoords.forEach(function (o) {
          Object.keys(o).forEach(function (k) {
              if (isFinite(o[k])) {
                  o[k] = +o[k];
              }
          });
      });
      
      console.log(outerCoords);
      .as-console-wrapper { max-height: 100% !important; top: 0; }

      【讨论】:

      • 遇到类型错误
      【解决方案5】:

      您可以使用 JSON.parse 和自定义 reviver 函数来操作您的元素。

      var outderCoords1=[{"lat":"-1.325416","lng":"36.669051"},
       {"lat":"-1.392932","lng":"36.768752"}];
      
      var outerCoords = JSON.parse(JSON.stringify(outderCoords1), 
         function(name, value) {
         if(!(typeof value.replace === "undefined")){
             var v= parseFloat(value.replace(/"/g, ""));
                  alert(typeof(v));
                 } 
              });

      【讨论】:

      • 这是它给出的响应..[{'lat':'-1.325416','lng':'36.669051'},{'lat':'-1.392932','lng': '36.768752'},{'lat':'-1.390505','lng':'36.810023'},{'lat':'-1.448266','lng':'36.952769'},{'lat':'- 1.267033','lng':'37.094882'},{'lat':'-1.214605','lng':'37.053978'},{'lat':'-1.169516','lng':'36.895608'}]
      • 我已经给你了想法,你可以把你的转换逻辑放上去
      • 我的意思是说它不输出对象。它输出一个字符串
      • @Lizbeth,我们可以在删除引号后使用 parseFloat 将字符串转换为数字,参考更新的答案。
      猜你喜欢
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多