将JSON数组对象转换为Highchart数组?

3

我正在使用Highchart插件开发图表。为了给图表提供动态输入,我需要将JSON格式更改为数组。如何使用JavaScript将JSON数组对象格式更改为数组?

[
        {
            "scoreCount": "108",
            "legendDesc": "Excellent ",
            "colorPatchCode": "#009900"
        },
        {
            "scoreCount": "20",
            "legendDesc": "Fail ",
            "colorPatchCode": "#FF0000"
        }
    ]

将类似于数组的格式转换为

[
        [
            "scoreCount": "108",
            "legendDesc": "Excellent ",
            "colorPatchCode": "#009900"
        ],
        [
            "scoreCount": "20",
            "legendDesc": "Fail ",
            "colorPatchCode": "#FF0000"
        ]
    ]

Can any one help?


2
第二个片段不是有效的JavaScript。 - Oleg V. Volkov
但我需要输出以那种方式。 - selladurai
@selladurai 输出结果不能是这样的。请提供目标,我们会尽力帮助。 - Royi Namir
请参考:http://stackoverflow.com/questions/8216090/to-pass-dynamic-json-array-to-highcharts-pie-chart - selladurai
@selladurai,请不要尝试复制/粘贴编码。请尝试理解您正在做什么以及为什么这样做。 - Oleg V. Volkov
显示剩余4条评论
5个回答

4
[
            "scoreCount": "108",
            "legendDesc": "Excellent ",
            "colorPatchCode": "#009900"
        ],

不是有效的结构。数组可以包含单个元素,原生类型或包含其他项(属性)或数组的对象。


将动态JSON数组传递给Highcharts饼状图 - selladurai
作为开发者,我们应该编写有效的代码。当然,我们可以创建一个包含无效数据的字符串,但它不会是可互操作的。不要只考虑眼前,要考虑如何以正确的方式完成。我相信你正在使用的API并没有强制你编写这个无效的代码。 - Royi Namir
[[1,2],[3,4]]与[[1:2],[3:4]]非常不同。 - Royi Namir

1

如果我们尝试这样做:

var arr = [
        {
            "scoreCount": "108",
            "legendDesc": "Excellent ",
            "colorPatchCode": "#009900"
        },
        {
            "scoreCount": "62",
            "legendDesc": "Good ",
            "colorPatchCode": "#99CC00"
        },
        {
            "scoreCount": "55",
            "legendDesc": "Acceptable ",
            "colorPatchCode": "#FFFF00"
        },
        {
            "scoreCount": "31",
            "legendDesc": "Poor ",
            "colorPatchCode": "#FF9900"
        },
        {
            "scoreCount": "20",
            "legendDesc": "Fail ",
            "colorPatchCode": "#FF0000"
        }
    ];

for (i = 0;i<arr.length;i++) {
    var a = [];
    for (n in arr[i]) {
        a[n] = arr[i][n];
    }
    arr[i] = a;
}

for (i = 0;i<arr.length;i++) {
    alert(arr[i]['scoreCount']);
}

0

http://jsfiddle.net/sPN7z/

var source = [
    {
        "scoreCount": "108",
        "legendDesc": "Excellent ",
        "colorPatchCode": "#009900"
    },
    {
        "scoreCount": "62",
        "legendDesc": "Good ",
        "colorPatchCode": "#99CC00"
    },
    {
        "scoreCount": "55",
        "legendDesc": "Acceptable ",
        "colorPatchCode": "#FFFF00"
    },
    {
        "scoreCount": "31",
        "legendDesc": "Poor ",
        "colorPatchCode": "#FF9900"
    },
    {
        "scoreCount": "20",
        "legendDesc": "Fail ",
        "colorPatchCode": "#FF0000"
    }
];

var out = [];

for (var i = 0; i < source.length; i++) {
    var tmp = [];
    for (var i2 in source[i]) {
        tmp.push(source[i][i2]);
    }
    out.push(tmp);
}

返回的翻译文本如下:

输出将如下:

[
    ["108","Excellent ","#009900"],
    ["62","Good ","#99CC00"],
    ["55","Acceptable ","#FFFF00"],
    ["31","Poor ","#FF9900"],
    ["20","Fail ","#FF0000"]
]

就像其他人已经说过的那样...你不能在JavaScript数组中存储键值。这就是JSON的作用。


0
虽然语法是错误的,但如果你想的话,你可以以这种格式创建字符串。
但是,正如你所知,你无法将其读回JavaScript变量。

0

您可以使用JavaScript的面向对象能力以更清晰的方式完成此操作。

var jsonArray = [    {      "scoreCount": "108",      "legendDesc": "优秀 ",      "colorPatchCode": "#009900" }, {      "scoreCount": "62",      "legendDesc": "良好 ",      "colorPatchCode": "#99CC00" }, {      "scoreCount": "55",      "legendDesc": "可接受 ",      "colorPatchCode": "#FFFF00" }, {      "scoreCount": "31",      "legendDesc": "较差 ",      "colorPatchCode": "#FF9900" }, {      "scoreCount": "20",      "legendDesc": "不及格 ",      "colorPatchCode": "#FF0000" } ];
function MyJsObject(scoreCount, legendDesc, colorPatchCode) {      this.scoreCount = scoreCount;      this.legendDesc = legendDesc;      this.colorPatchCode = colorPatchCode; }
function createJSArray() {      var jsArray = new Array();      for(i = 0; i < jsonArray.length; i++) {          var m = new MyJsObject(jsonArray[i].scoreCount,                         jsonArray[i].legendDesc, jsonArray[i].colorPatchCode);          jsArray[i] = m;      }      alert(jsArray[4].scoreCount);//像这样访问任何对象 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接