2014-03-31 70 views
0

我需要能夠快速識別JSON數據結構是否包含數組。例如,正則表達式應該返回true正則表達式來檢查JSON是否包含數組

{ 
    "array": [ 
    1, 
    2, 
    3 
    ], 
    "boolean": true, 
    "null": null, 
    "number": 123, 
    "object": { 
    "a": "b", 
    "c": "d", 
    "e": "f" 
    }, 
    "string": "Hello World" 
} 

false

{ 
    "boolean": true, 
    "null": null, 
    "number": 123, 
    "object": { 
    "a": "b", 
    "c": "d", 
    "e": "f" 
    }, 
    "string": "[Hello World]" 
} 

任何想法?

我會更喜歡如果這個檢查可以通過正則表達式來完成,而不是遍歷json,除非任何人都可以給我一個更好的方法。

+0

只用正則表達式就很難做到。例如,考慮一個看起來像數組的字符串值。 – Biffen

+2

爲什麼?解析JSON得到廣泛支持。 –

+0

爲什麼不解析動態對象中的json字符串並檢查.array是否爲空?沒有必要使用這樣的正則表達式。 – coolmine

回答

0

您可以使用像jshon這樣的工具來格式化JSON的某些「規範」。

我不推薦這種方法。

$ cat foo.json 
{"root": { "foo": 1, "bar": [2,3,4], "baz":"BAZ", "qux":[5,6, [7,8, [9, 10]]]}} 
$ jshon < foo.json 
{ 
"root": { 
    "foo": 1, 
    "bar": [ 
    2, 
    3, 
    4 
    ], 
    "baz": "BAZ", 
    "qux": [ 
    5, 
    6, 
    [ 
    7, 
    8, 
    [ 
    9, 
    10 
    ] 
    ] 
    ] 
} 
} 
$ jshon < foo.json | grep '^\s*\]' 
    ], 
    ] 
    ] 
    ] 
$ echo $? 
0 
0

使用這個表達式:

/:?\s+\[/g 

然後你就可以簡單地做:

var json = "json here"; 
var containsArray = json.match(/:?\s+\[/g) !== null; // returns true or false 

演示:http://jsfiddle.net/pMMgb/1

+0

即使這樣做,如果json格式不正確,它也不能正常工作。 –

+0

@JanisPeisenieks,給我一個例子。一個數組必須以':'開頭,有或沒有空格,然後是'['。現在,如果它是其他格式,那不是一個數組 –

+0

http://jsfiddle.net/ph4Je/1/正如我所說的,從技術上講它是有效的。如果json格式不正確,但... –

0

嘗試

var a = {} // required json. 
var regex = /\[(.*)\]/ 
regex.test(a) 
0

在回顧了答案之後,我重新考慮了一下,我將繼續解析和遍歷以找到我的問題的答案。

Regexing原來是不可靠的,其他選項只是增加了更多的卷積。

感謝大家的回答!

相關問題