Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.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对象以获取列数据_Javascript_Json - Fatal编程技术网

Javascript 解析JSON对象以获取列数据

Javascript 解析JSON对象以获取列数据,javascript,json,Javascript,Json,假设我有一个JSON对象中的数据,格式类似于 {"data": [["X","Y","Z"], ["52","23","10"], ["46","65","32"]] } 因此,基本上,每一行都采用[X,Y,Z]的形式 访问整个“列”或数据向量的最简单方法是什么?例如,假设“X”、“Y”和“Z”是一个标题行,我想访问所有的“X”数据 我是否需要以某种方式迭代整个对象来检索每个元素的第一个成员,它将对应于“X”列 如果可能的话,我想用JavaScrip

假设我有一个JSON对象中的数据,格式类似于

{"data":
       [["X","Y","Z"], 
       ["52","23","10"],
       ["46","65","32"]]
}
因此,基本上,每一行都采用
[X,Y,Z]
的形式

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

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

如果可能的话,我想用JavaScript来做这件事


非常感谢您的帮助

您应该尝试使用类似Gson或Jackson的Json处理器来处理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
}
JsonObject json=new JsonParser().parse(“…json字符串…”);
JsonArray data=json.get(“数据”);
JsonArray标签=data.getAsJsonArray(0)
对于(int i=1;i
“jsonpath”似乎也是一个不错的选择:

这将导致类似于

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

我已经为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();
    }
编辑:对于JavaScript:

变量文本=“{\'data\”:[[\'X\',\'Y\',\'Z\'],[\'52\',\'23\',\'10\'],[\'46\',\'65\',\'32\']}; var out=“”; obj=JSON.parse(文本); arr=对象数据; 控制台日志(arr); 对于(i=0;i”; } document.getElementById(“demo”).innerHTML=out;
请尝试下面简单直接的示例代码,以访问第一列

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

<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>

var obj={
“数据”:[
[“X”、“Y”、“Z”],
[ "52", "23", "10" ],
[ "46", "65", "32" ] 
]
};
var列;
对于(变量i=0,j=obj.data.length;i
您可以添加您希望使用哪种语言执行此操作的说明吗@ツ普拉蒂克布塔尼ツ 是的,很抱歉,添加到描述中!:)非常感谢。最终输出是什么?@AndroidNoobie我已经为JavaScriptGood提示编辑了我的答案。请记住,在Stackoverflow中,裸链接不如链接+应用于问题上下文的代码片段更受欢迎。如果你想建议一个链接,用评论代替回答。太好了!非常感谢你!我也只是在学习JavaScript。:)不得不做一个小修正。对于第二个For循环,j=obj.data.length,而不是obj.data[0].length。obj.data[0].length给出了“变量数组”的长度,因此在本例中为3。obj.data.length给出数据列的长度。已提交编辑以供审阅。否则,一切都好——再次感谢!
<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>
<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>