【问题标题】:how to get arrays inside objects , remove double quotes and make it as an object to put inside json syntax如何在对象中获取数组,删除双引号并将其作为对象放入 json 语法中
【发布时间】:2016-02-05 13:30:39
【问题描述】:

我像这样制作jsonstring:

  { "dataTarget":["[Date.UTC(2016,3,01),10.00]",
                  "[Date.UTC(2016,1,01),5.00]"],
     "dataRealisasi" :["[Date.UTC(2016,3,01),10.00]",
                      "[Date.UTC(2016,1,01),5.00]"]

     }

我通过 jquery ajax 检索它并解析它

 var dataChart =  JSON.parse(msg.d);                   
 var dataTarget = dataChart['dataTarget']
 var dataRealisasi = dataChart['dataRealisasi']

i 控制台日志 dataTarget ,这是结果:

["[Date.UTC(2016,3,01),10.00]", "[Date.UTC(2016,1,01),5.00]"]

我需要的是一个像这样的变量

[
[Date.UTC(2016,3,01),10.00],
[Date.UTC(2016,1,01),5.00]
]

我可以将它作为变量传递给这个

  $('#container3').highcharts({
    chart: {
        type: 'spline'
    },
    title: {
        text: 'Monitoring Proyek'
    },
    subtitle: {
        text: 'Proyek'
    },
    xAxis: {
        type: 'datetime',
        dateTimeLabelFormats: { // don't display the dummy year
            month: '%e. %b',
            year: '%b'
        },
        title: {
            text: 'Date'
        }
    },
    yAxis: {
        title: {
            text: 'Target (%)'
        },
        min: 0
    },
    tooltip: {
        headerFormat: '<b>{series.name}</b><br>',
        pointFormat: '{point.x:%e. %b}: {point.y:.2f} %'
    },

    plotOptions: {
        spline: {
            marker: {
                enabled: true
            }
        }
    },

    series:  [{
        "name": "Proyeksi Target",          
        "data":  dataTarget // this is the variable


    }, {
        name: 'Realisasi',
        data: 
           dataRealisasi // this is the variable

    }]

     });

更新: 问题是当我创建没有双引号的 json 字符串然后 JSON.parse 它返回错误... 我已经更改了服务器端函数并返回对象:

[["Date.UTC(2016,3,01)",10.00], ["Date.UTC(2016,1,01)",5.00]] 

,现在我需要删除双引号并对其进行更改:

[[Date.UTC(2016,3,01),10.00], [Date.UTC(2016,1,01),5.00]]

这里需要帮助...

【问题讨论】:

  • 修复服务器而不是客户端monkey-patching
  • 怎么做?问题是如果我不使用双引号,那么它会在 JSON.parse 时出错....我已经更改了服务器端函数并返回:[["Date.UTC(2016,3,01)",10.00] , ["Date.UTC(2016,1,01)",5.00]] ,现在我需要删除双引号并对其进行更改: [[Date.UTC(2016,3,01),10.00], [ Date.UTC(2016,1,01),5.00]]
  • 去掉json文件中的引号?
  • 发送了有效的日期字符串或时间戳
  • @wrleskovec 你怎么能做到这一点?将是无效的 json。

标签: javascript jquery json


【解决方案1】:

你可以像这样转换json(不要使用eval):

[
    "[Date.UTC(2016,3,01),10.00]", 
    "[Date.UTC(2016,1,01),5.00]"
].map(function(v){
    return new Function('return ' + v)();
});

但强烈建议您只使用时间戳,因为这种转换比平常花费更多

【讨论】:

【解决方案2】:

不知道前面的 0,所以我会清除它

 // the data 
var data = [
    "[Date.UTC(2016,3,01),10.00]", 
    "[Date.UTC(2016,1,01),5.00]"
];

var clean = function(n){  // remove leadin zero as we want the numbers.
  return Number(n.replace(/^0+?/, ""));
}

// removes unneeded characters "Date.UTC(", ")","[","]"
// split to an array of strings. Clean of leading zeros ? and convert to numbers
var convert = function(str){
  var n = str.replace(/Date.UTC\(|\)|\[|\]/g, "").split(",").map(clean);
  return [Date.UTC(n[0], n[1], n[2]), n[3]]; // get date and return the array item as an array
}
// Start the ball rolling.
try{
    data = data.map(convert);
}catch(e){
    console.log("You are having a bad day!");
}
// data === [[1459468800000, 10], [1454284800000, 5]];

【讨论】:

  • 谢谢.. 但我收到错误:TypeError: data.map is not a function。以前我已将字符串更改为 var data = [ ["Date.UTC(2016,3,01)",10.00], ["Date.UTC(2016,1,01)",5.00] ];是这个原因吗?
  • 对于data.map 抛出的错误数据不能是数组,或者您使用的是非常旧的浏览器。也就是说,我的回答不适用于您对输入数据所做的更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 2022-11-05
  • 1970-01-01
  • 2021-07-18
  • 2021-10-17
  • 1970-01-01
  • 2017-06-26
相关资源
最近更新 更多