将JSON文本转换为JS对象

时间:2014-03-05 11:31:37

标签: javascript json d3.js

我有一个格式为

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

    var jsonString; nv.addGraph(函数(){        var chart = nv.models.discreteBarChart()。x(Something).y(Something);        。d3.select( '#位置')基准(jsonString).CALL(图表);        返回图表; });

  3. 请注意,我将json文本原样传递给datum()函数。这不起作用。

  4. 我尝试使用json.parse(jsonString),但它无法正常工作
  5. 我尝试使用eval,但它也无济于事。
  6. 我编辑json字符串以添加如下的根节点:

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

  7. 以上内容通过所有在线解析器返回错误。

  8. 但是,我现在可以使用eval(“(”+ jsonString +“)”)来获取我的图表。(JSON.parse()仍然不起作用)
  9. 现在,我的知识渊博的同事说eval()是危险的,应该在火刑柱上烧掉。所以,我猜我应该选择无效的JSON.parse()。

    有没有人知道我在使用JSON.parse()做错了什么?我是JSON的新手并且让我疯狂。

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

    我正在使用从here

    获得的以下功能
    public static class JSONHelper
        {
            public static string ToJSON(this object obj)
            {
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                return serializer.Serialize(obj);
            }
    
            public static string ToJSON(this object obj, int recursionDepth)
            {
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                serializer.RecursionLimit = recursionDepth;
                return serializer.Serialize(obj);
            }
        }
    

    返回的字符串只是作为字符串变量传递给控制器​​。没有什么好看的。

2 个答案:

答案 0 :(得分:1)

离散条形码char期望标签和值的名称相同:

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
    }
    ]}
];

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

答案 1 :(得分:0)

我在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字符串。