解析JSON对象以获取列数据

时间:2014-12-10 06:29:10

标签: javascript json

假设我的数据格式类似于......

{"data":
       [["X","Y","Z"], 
       ["52","23","10"],
       ["46","65","32"]]
}

基本上,每一行都采用[X, Y, Z]形式。

然后访问整个“列”或数据向量的最简单方法是什么?例如,假设“X”,“Y”和“Z”是标题行,我想访问所有“X”数据。

我是否需要以某种方式迭代整个对象以检索每个元素的第一个成员,这对应于“X”列?

如果可能,我想在JavaScript中执行此操作。

非常感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

我已为Android运行此代码您可以使用此类逻辑在JavaScript中试用:

    String json = "{\"data\":[[\"X\",\"Y\",\"Z\"],[\"52\",\"23\",\"10\"],[\"46\",\"65\",\"32\"]]}";
    try {
        JSONObject jsonObj = new JSONObject(json);

        Log.i(TAG, "DatA : " + jsonObj.getJSONArray("data").length());
        JSONArray array = jsonObj.getJSONArray("data");
        for(int i=0; i<array.length(); i++) {
            Log.i(TAG, "Value : " + array.getJSONArray(i).getString(0));
        }

    } catch (JSONException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

Logcat中的输出:

12-10 12:26:32.628: I/Demo(28709): DatA : 3
12-10 12:26:32.629: I/Demo(28709): Value : X
12-10 12:26:32.629: I/Demo(28709): Value : 52
12-10 12:26:32.629: I/Demo(28709): Value : 46

已编辑:适用于JavaScript:

<html>
<body>
<p id="demo"></p>

<script>
var text = '{\"data\":[[\"X\",\"Y\",\"Z\"],[\"52\",\"23\",\"10\"],[\"46\",\"65\",\"32\"]]}';
var out = "";
obj = JSON.parse(text);

arr = obj.data;
console.log(arr);
for(i = 0; i < arr.length; i++) {
        out += arr[i][0] + "<br>";
}

document.getElementById("demo").innerHTML = out;

</script>

</body>
</html>

答案 1 :(得分:1)

尝试以下简单直接访问第一列的示例代码。

首先迭代第一行以找到正确的列,然后获取下一行的该列的值。

<script type="text/javascript">
    var obj = {
        "data" : [ 
                   [ "X", "Y", "Z" ], 
                   [ "52", "23", "10" ],
                   [ "46", "65", "32" ] 
                 ]
    };
    var column;
    for (var i = 0, j = obj.data.length; i < j; i++) {
        if (obj.data[0][i] === 'X') {
            column = i;
            break;
        }
    }

    for (var i = 1, j = obj.data.length; i < j; i++) {
        var val = obj.data[i][column];
        console.log(val);
    }
</script>

答案 2 :(得分:0)

你应该尝试使用像Gson或Jackson Json Processor这样的东西来处理JSON并将其反序列化为你可以使用的东西。

如果您这样做,您将能够执行以下操作:

JsonObject json = new JsonParser().parse("...json string...");
JsonArray data = json.get("data");
JsonArray labels = data.getAsJsonArray(0)
for (int i = 1; i < data.size(); i++) {
    JsonArray points = data.getAsJsonArray(i);
    // do something with:  points.getInt(0) -- x column
    // do something with:  points.getInt(1) -- y column
    // do something with:  points.getInt(2) -- z column
}

答案 3 :(得分:0)

“jsonpath”似乎也是一个不错的选择:

会导致类似

的内容
vector X: /data[1][*][1]
vector Y: /data[1][*][2]
vector Z: /data[1][*][3]