假设我的数据格式类似于......
{"data":
[["X","Y","Z"],
["52","23","10"],
["46","65","32"]]
}
基本上,每一行都采用[X, Y, Z]
形式。
然后访问整个“列”或数据向量的最简单方法是什么?例如,假设“X”,“Y”和“Z”是标题行,我想访问所有“X”数据。
我是否需要以某种方式迭代整个对象以检索每个元素的第一个成员,这对应于“X”列?
如果可能,我想在JavaScript中执行此操作。
非常感谢您的帮助!
答案 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
<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]