Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将JSON文本转换为JS对象_Javascript_Json_D3.js - Fatal编程技术网

Javascript 将JSON文本转换为JS对象

Javascript 将JSON文本转换为JS对象,javascript,json,d3.js,Javascript,Json,D3.js,我有一个JSON字符串,它的格式是 [{"A":"SomeStringData","B":1}, {"A":"SomeStringData","B":2}, ... ... ...] 请注意,这可以很好地通过所有json在线解析器,因此是一个有效的json文本。 我正在尝试传递数据以使用d3和nv.d3创建图表。我使用的代码片段如下所示: var-jsonString; nv.addGraphfunction{ var图表=nv.models.discreteBarChart.xSomethi

我有一个JSON字符串,它的格式是

[{"A":"SomeStringData","B":1},
{"A":"SomeStringData","B":2},
...
...
...]
请注意,这可以很好地通过所有json在线解析器,因此是一个有效的json文本。 我正在尝试传递数据以使用d3和nv.d3创建图表。我使用的代码片段如下所示:

var-jsonString; nv.addGraphfunction{ var图表=nv.models.discreteBarChart.xSomething.ySomething; d3.选择'location'.datumjsonString.callchart; 收益表; };

请注意,我将json文本原样传递给datum函数。这是行不通的

我尝试了json.parsejsonString,但它也不起作用 我试着评估一下,但也没用。 我编辑json字符串以添加一个根节点,如下所示:

[{值:[{A1:SomeStringData,A2:1}, {B1:SomeStringData,B2:2}, ... ... …]}]

以上内容通过所有联机解析器返回一个错误

但是,我可以使用eval+jsonString+now.JSON.parse来获取图表,但仍然不起作用 现在,我有见识的同事说eval很危险,应该在火刑柱上烧掉。所以,我猜我应该选择JSON.parse,它不起作用

有人知道我在JSON.parse上做错了什么吗?我是JSON新手,它让我发疯

如果有帮助,我会将json字符串作为字符串传递给MVC控制器:

Im使用以下从中获得的函数


返回的字符串只是作为字符串变量传递给控制器。没有什么特别之处。

我在Chrome控制台中尝试了以下功能

var jsonString = '[{"A1": "SomeStringData","A2": 5},{"B1": "SomeStringData","B2": 14}]';
var jsonObject = JSON.parse(jsonString);
JSON.stringify(jsonObject);
然后按预期输出

"[{"A1":"SomeStringData","A2":5},{"B1":"SomeStringData","B2":14}]"

你用的是什么浏览器?我只能假设这是一个浏览器错误,或者您没有准备开头和结尾都带有撇号的JSON字符串。

离散条形字符期望标签和值具有相同的名称:

nv.addGraph(function() {  
  var chart = nv.models.discreteBarChart()
      .x(function(d) { return d.label })
      .y(function(d) { return d.value })
  ...
  ;
因此,要么将预期名称合并到数据中,如下所示:

historicalBarChart =
  [{
    key: "SomeKey",
    values:[
       { 
        "label":"SomeStringData",
       "value":100
    }, 
    {
      "label":"SomeStringData",
      "value":200
    }
    ]}
];

或者保留您的姓名,然后更改代码,确保数据中的姓名保持一致。

您是否尝试过JSON.Stringify实际上,是的,在编辑JSON文件之前和之后的两种情况下。没有帮助。然而,据我所知,stringify的目的是从JS对象创建JSON文本,而不是相反。我认为您的JSON字符串存在一些问题,它的格式应该是A1:SomeStringData,A2:SomeNumericData,我对此表示高度怀疑,因为我没有自己制作。JSON文本由JavaScriptSerializer类构建。此外,W3学校的JSON教程在处理数字数据时提到了相同的格式@HarshSharma他的JSON很好,JSON中的键需要引号。实际上,我将JSON文本作为字符串从MVC控制器传递。我很可能错了,但我猜Javascript将其视为字符串本身,因为我可以通过警报查看数据。你能发布一段代码,从MVC控制器获取jsonString吗?此外,我使用的是最新的Chrome浏览器:版本33.0.1750.146,如果有帮助的话。当然,已发布代码段。如何在客户端获取此字符串?可能是返回的数据类型未被识别为字符串,这可能会在使用JSON.Parses时产生问题。它们是统一的,因为我可以在使用eval函数时使用它们绘制图表。对于这种混淆,很抱歉,但它们是统一的。这只是一个示例json文本,我没有很好地使用它。非常抱歉。np,解释东西可能很难:-
historicalBarChart =
  [{
    key: "SomeKey",
    values:[
       { 
        "label":"SomeStringData",
       "value":100
    }, 
    {
      "label":"SomeStringData",
      "value":200
    }
    ]}
];