2013-07-13 39 views
0

我有一个来自JSON的坐标数组。它看起来像这样。获取长度并遍历嵌套数组

[ [ [ [ 18.446000, -33.921060 ], [ 18.446020, -33.923410 ], [ 18.444510, -33.923620 ], [ 18.443350, -33.923990 ], [ 18.443350, -33.924360 ], [ 18.443360, -33.924970 ], [ 18.443230, -33.924970 ]]]] 

我无法工作,如何让内设定值[纬度,经度]的[纬度,经度]长度...所以我可以遍历他们。 在Python中我会做这样的事情:

for value in values[0][0]: 
    print value 

一点在Java相当于是什么呢? 我想我在Java中与数组混淆。我现在想用这样的东西来帮助他们,但说实话,我是在黑暗中拍摄的。

List<JSONObject> geocords = Arrays.asList(cords.getJSONObject(0)) 

我已经试过了诸如:

for (i=0; HOW TO GET LENGTH OF INNER SET OF VALUES?; i++){ 

}

编辑

List<JSONObject> geocords = Arrays.asList(cords.getJSONObject(0)) 

抛出JSONException。

如果我将其更改为:

List<JSONArray> geocords = Arrays.asList(cords.getJSONArray(0)); 

然后geocords输出为:

[[[[18.49576,-34.01209],[18.49447,-34.01473],[18.49327,-34.01705],[18.48914,-34.02501],[18.48866,-34.02592],[18.48873,-34.02612],[18.48912,-34.027],[18.48917,-34.02711],[18.49,-34.02899],[18.49003,-34.02976],[18.49031,-34.03164],[18.49051,-34.03264],[18.49093,-34.03462],[18.49152,-34.03742],[18.4917,-34.03772],[18.4918,-34.03782],[18.49186,-34.038],[18.49184,-34.03823],[18.49159,-34.0388],[18.49105,-34.03986],[18.49041,-34.04115],[18.48984,-34.04113],[18.4891,-34.04246],[18.48784,-34.04214],[18.48791,-34.04326],[18.48786,-34.04356],[18.48754,-34.04391],[18.48738,-34.04391],[18.48713,-34.04399],[18.48693,-34.04405],[18.48677,-34.04407],[18.48665,-34.04396],[18.4865,-34.0439],[18.48631,-34.04396],[18.48611,-34.04408],[18.48598,-34.04427],[18.48599,-34.04456],[18.48595,-34.04487],[18.48583,-34.04508],[18.48557,-34.04531],[18.48527,-34.04543],[18.48496,-34.04547],[18.48446,-34.04553],[18.48418,-34.04498],[18.48342,-34.04371],[18.48335,-34.0436],[18.48267,-34.04247],[18.47827,-34.04429],[18.47818,-34.04436],[18.47645,-34.04146],[18.47652,-34.04122],[18.47662,-34.04039],[18.47632,-34.03942],[18.47611,-34.03916],[18.47611,-34.0391],[18.47589,-34.03756],[18.47588,-34.03748],[18.47438,-34.03715],[18.47389,-34.0368],[18.47308,-34.03643],[18.47103,-34.03727],[18.47053,-34.03757],[18.47029,-34.03773],[18.46953,-34.03846],[18.46925,-34.03861],[18.46915,-34.03867],[18.46899,-34.03872],[18.46877,-34.03879],[18.4683,-34.03884],[18.46806,-34.03887],[18.46791,-34.03889],[18.46757,-34.03897],[18.46747,-34.03906],[18.46728,-34.03925],[18.46711,-34.03945],[18.46698,-34.03967],[18.46685,-34.03992],[18.46672,-34.04016],[18.46664,-34.04102],[18.46656,-34.04251],[18.46648,-34.04292],[18.46637,-34.04356],[18.46617,-34.04355],[18.46585,-34.0435],[18.46575,-34.04348],[18.46561,-34.04346],[18.46538,-34.04342],[18.46515,-34.04339],[18.46484,-34.04334],[18.46447,-34.04328],[18.46396,-34.0432],[18.4636,-34.04314],[18.46366,-34.04288],[18.46374,-34.04253],[18.46237,-34.04232],[18.46158,-34.0422],[18.4613,-34.04216],[18.45996,-34.04196],[18.45925,-34.04185],[18.45863,-34.04176],[18.45756,-34.0416],[18.45656,-34.04144],[18.45602,-34.04136],[18.45571,-34.04131],[18.456,-34.03991],[18.45458,-34.03972],[18.45408,-34.03965],[18.45373,-34.03968],[18.45337,-34.03972],[18.45303,-34.03981],[18.45042,-34.0406],[18.45022,-34.04002],[18.45018,-34.03994],[18.45005,-34.03972],[18.44967,-34.03905],[18.44912,-34.03807],[18.44876,-34.03742],[18.44861,-34.03717],[18.44854,-34.03702],[18.44843,-34.03683],[18.44822,-34.03646],[18.44812,-34.03628],[18.44801,-34.0361],[18.44791,-34.0359],[18.44781,-34.03573],[18.4476,-34.03535],[18.44752,-34.03521],[18.44737,-34.03495],[18.44723,-34.03471],[18.44709,-34.03444],[18.44698,-34.03425],[18.44687,-34.03405],[18.44669,-34.03374],[18.44635,-34.03313],[18.44625,-34.03295],[18.44613,-34.03272],[18.446,-34.03251],[18.4459,-34.0323],[18.44576,-34.03205],[18.44516,-34.031],[18.44408,-34.029],[18.44385,-34.02882],[18.44376,-34.02921],[18.4437,-34.02938],[18.44364,-34.02947],[18.44328,-34.02994],[18.44296,-34.03014],[18.44236,-34.03017],[18.44179,-34.03008],[18.44168,-34.03007],[18.44054,-34.02989],[18.44019,-34.02988],[18.44001,-34.02992],[18.43968,-34.02999],[18.43951,-34.03006],[18.4394,-34.03012],[18.43935,-34.03017],[18.43849,-34.03086],[18.43808,-34.03122],[18.43759,-34.03164],[18.43714,-34.032],[18.43695,-34.03215],[18.43645,-34.03234],[18.43585,-34.03256],[18.43542,-34.03272],[18.43464,-34.033],[18.43413,-34.03319],[18.4336,-34.03335],[18.43299,-34.0335],[18.43272,-34.03353],[18.43235,-34.03358],[18.43147,-34.03363],[18.43134,-34.03364],[18.43102,-34.03367],[18.43065,-34.03373],[18.4299,-34.03394],[18.42951,-34.03404],[18.42911,-34.03414],[18.42893,-34.03415],[18.42873,-34.03418],[18.42845,-34.03422],[18.42816,-34.03429],[18.42647,-34.03472],[18.42627,-34.03478],[18.42608,-34.0349],[18.4248,-34.03586],[18.42294,-34.03728],[18.42202,-34.03798],[18.42184,-34.03806],[18.42168,-34.03813],[18.42137,-34.03811],[18.42104,-34.03806],[18.42068,-34.03799],[18.41975,-34.03781],[18.41935,-34.03786],[18.41911,-34 
+0

你可以张贴了System.out.println'结果( geocords)'? –

+0

嗨。已按要求更新。 – andrewtrench

+0

你用什么json库? – Jirka

回答

0

您将通过内部设定环路像这样在Java中:

for (int i=0;i<array.length;i+=1) 
{ 
    for (int j=0;j<array[i].length;j+=1) 
    { 
      System.out.println(array[i][j]); 
    } 
} 

另外, i可以硬编码到您想要运行的索引。

+0

嗨。感谢您的指导。我一直在尝试沿着这些方向行,但得到一个错误“表达式的类型必须是数组类型,但它解析为JSONArray” – andrewtrench

3

你确定在开头的四个方括号可以吗?如果是的话,那么这应该工作:

 // get the array of coordinates buried two levels down of singleton arrays 
     JSONArray array = coord.getJSONArray(0).getJSONArray(0); 

     // iterate through the array of coordinates 
     for (int i = 0; i < array.length(); i++) { 
      JSONArray inside = array.getJSONArray(i); 
      for (int j = 0; j < inside.length(); j++) { 
       System.out.println(inside.getDouble(j)); 
      } 
     } 

我不知道为什么json.org不提供一个更友好的界面(如迭代)