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

how to get the value of json element without the double quote

本文关键字:情况下 获取 JSON 元素      更新时间:2023-09-26

我通过这个函数从数据表生成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   
 } 

});

从服务器收到的消息或响应:

{"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。解析(msg.d) 但错误:未捕获的类型错误:JSON。解析不是一个函数

我真正需要的是将Highcharts JS元素的动态值放在下面,dataTarget和dataRealisasi可以通过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: '<b>{series.name}</b><br>',
            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);