如何在没有双引号的情况下获取json元素的值

我通过这个函数从datatable生成json:

public string DataTableToJSONWithStringBuilder3(DataTable table) { var JSONString = new StringBuilder(); if (table.Rows.Count > 0) { JSONString.Append("["); for (int i = 0; i < table.Rows.Count; i++) { // JSONString.Append("{"); for (int j = 0; j < table.Columns.Count; j++) { if (j < table.Columns.Count - 1) { if (j == 1) { JSONString.Append("\"[" + table.Rows[i][j].ToString() + "]\","); } else { JSONString.Append("\"[" + table.Rows[i][j].ToString() + "]\","); } } else if (j == table.Columns.Count - 1) { if (j == 1) { JSONString.Append("\"[" + table.Rows[i][j].ToString() + "]\""); } else { JSONString.Append("\"[" + table.Rows[i][j].ToString() + "]\""); } } } if (i == table.Rows.Count - 1) { JSONString.Append(""); } else { JSONString.Append(","); } } JSONString.Append("]"); } return JSONString.ToString(); } 

然后我通过调用方法通过ajax检索返回值:

  $.ajax({ type: "POST", url: "/ProjMonitor/Report/ProjectMonitoringSummary.aspx/GetlineChart", contentType: "application/json", dataType: "json", data: "{id:'"+idproyek+"'}", // contentType: "application/json; charset=utf-8", success: function (msg) { var data = msg.d } 

});

msg或从服务器收到的响应:

 {"d":"{ \"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]\"]}"} 

我需要一个像这样的变量的值而没有双引号:

 [{ "name": "Proyeksi Target", "data" : [ [ Date.UTC(2016, 3, 01), 10.00 ], [ Date.UTC(2016, 1, 01), 5.00 ] ] }, { "name": "Realisasi", "data": [ [Date.UTC(2016, 3, 01), 10.00 ], [Date.UTC(2016, 1, 01), 5.00 ] ] }] 

你们能帮助我吗?

我试过JSON.Parse(msg.d)但错误:未捕获的TypeError:JSON.Parse不是函数

我真正需要的是将highcharts JS元素的动态值放在下面,dataTarget和dataRealisasi可以通过调用带有参数thru jquery ajax的方法来改变。

  $('#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: '{series.name}
', pointFormat: '{point.x:%e. %b}: {point.y:.2f} %' }, plotOptions: { spline: { marker: { enabled: true } } }, series: [{ "name": "Proyeksi Target", "data": [ dataTarget ] }, { name: 'Realisasi', data: [ dataRealisasi ] }] });

dataTarget和dataRealisasi的格式应该是这样的

  [ [Date.UTC(1970, 9, 29), 0], [Date.UTC(1970, 10, 9), 0.4], [Date.UTC(1970, 11, 1), 0.25], [Date.UTC(1971, 0, 1), 1.66], [Date.UTC(1971, 0, 10), 1.8], [Date.UTC(1971, 1, 19), 1.76], [Date.UTC(1971, 2, 25), 2.62], [Date.UTC(1971, 3, 19), 2.41], [Date.UTC(1971, 3, 30), 2.05], [Date.UTC(1971, 4, 14), 1.7], [Date.UTC(1971, 4, 24), 1.1], [Date.UTC(1971, 5, 10), 0] ] 

没有报价..请帮忙

您可以使用JSON.parse()来解析JSON字符串。

 var array = JSON.parse(object.d); 

你没有有效的JSON ,因为

  • 领先的零
  • 插入语
  • 函数/方法调用

在这种情况下,我不建议使用另一种解决方案

 array = eval(object.d); 

更好的方法是以不使用eval()的方式组织数据。

使用此字符串的唯一方法是使用ReGex删除JSON对象或数组的范围之外的内容。

 var str = '{' + '"d": "[{' + '"name": "Proyeksi Target",' + '"data" : [' + '[ Date.UTC(2016, 3, 01), 10.00 ],' + '[ Date.UTC(2016, 1, 01), 5.00 ]' + ']' + '}, {' + '"name": "Realisasi",' + '"data": [' + '[Date.UTC(2016, 3, 01), 10.00 ],' + '[Date.UTC(2016, 1, 01), 5.00]' + ']' + '}]"' + '}'; // fix syntax errors str = str.match(/("\[\{".*}]")/g)[0]; str = str.substr(1, str.length - 2).replace(/(Date.UTC[^)]+\))/g, '"$1"'); // convert to object var jsonObj = JSON.parse(str); var myStr = JSON.stringify(jsonObj, null, 2); document.write(myStr);