2014-04-12 104 views
-1

JSON:解析動態變量名和JSON數

{ 
    id: "val", 
    name: "val", 
    var1: "val", 
    var2: "val", 
    ... 
    var#: "val" 
} 

在PHP我寫對子級類似:

while(isset(${"var".$i++})) 

但在Java(使用GSON)如何解析這個...它可能?

+0

是的,這是可能的。你想把它解析成什麼? –

+0

all vars to 1 ArrayList – Shaddow

+0

使用'Gson'或'Jackson'或_any_其他JSON解析器並將數據解析爲'Map '。 –

回答

1

如果您只是想拉出值並且不依賴於任何數據綁定,那麼您可以使用Gson解析器來解析JSON樹並自己走。

示例代碼如下所示。

JsonParser jsonParser = new JsonParser(); 
JsonElement tree = jsonParser.parse(json_input); 

// now you can walk it 
JsonObject document = tree.getAsJsonObject(); 

//check if -- is set 
document.has("var1"); 

// get the value 
document.get("var1").getAsString() 

// assuming your identifiers are are all consecutively numbered 
for (int i = 1; document.has("var" + i); i++) 
    document.get("var" + i).getAsString(); 
} 

// or to mimic your example - at the expense of readability 
int i = 0; 
while (document.has("var" + ++i)) { 
    document.get("var" + i).getAsString(); 
} 
+1

+1。你甚至可以重新創建OP的原始語法 - 'for(int i = 0; document.has(「var」+ i); ++ i){}' –

+0

Cool,並且gson可以檢查是否存在鍵名? – Shaddow

+0

是的......這就是代碼使用的。您可能需要根據「varX」的值進行調整。我只是假設一個字符串值。 – Joey

0

是的,你可以使用類似這樣的東西。

var i = 1; 
while (typeof e("data.var" + i) != 'undefined') { 
    // DO STUFF 
    i++ 
} 

我問爲什麼這是必要的,雖然,它會更容易使VAR1和VAR2到一個數組例如

{ 
id: "val", 
name: "val", 
myVar: [ 
     {"1" : "val", 
     {"2" : "val"} 
     ], 
... 
var#: "val" 
} 

,然後你可以只使用的foreach和(我認爲),你會得到性能提升,如果你有很多我

+0

我不能改變json結構 – Shaddow

+0

爲你解決,告訴誰曾經它是壞的,雖然:)頂部的例子應該工作。 – dops