2012-11-14 14 views
7

Nigdy wcześniej nie korzystałem z wyrażeń regularnych i szukam podziału pliku, który ma jeden lub więcej obiektów JSON, obiekty JSON nie są oddzielone przecinkiem. Muszę więc podzielić je między "} {" i zachować oba nawiasy klamrowe. To właśnie ciąg wygląda następująco:Dzielenie prostej struktury JSON za pomocą wyrażenia regularnego

{id:"123",name:"myName"}{id:"456",name:"anotherName"} 

Chciałbym tablicę ciągów jak przy użyciu string.split()

["{id:"123",name:"myName"}", "{"id:"456",name:"anotherName"}"] 
+0

możliwy duplikat http://stackoverflow.com/questions/2773710/php-as3-regex-to-split-multiple-json-in-one –

+0

Nie wiem o tym, to pytanie zawiera obiekty JSON wewnątrz obiektów , Próbuję zrobić coś znacznie prostszego, ale nie wiem jak. W tej chwili używam String [] temp = json.split ("\\} \\ {"); i dostaje pierwsze dobrze, ale myślę, że usuwa niektóre z nawiasów klamrowych, więc drugi obiekt nie jest poprawny. – Rebeka

+0

Jeśli jest jakaś szansa, że ​​pewna wartość ciągu w JSON może zawierać '} {', wtedy twoja jedyna szansa jest naprawdę parsowana. Możesz sparsować go jako prawdziwy JSON lub po prostu sparsować go na tyle, aby oddzielić zawartość napisów, prawdopodobnie również od cudzysłowów, ale musisz je sparsować. – hyde

Odpowiedz

11

Jeżeli obiekty nie są bardziej skomplikowane niż to, co można pokazać, można użyć lookarounds tak :

String[] strs = str.split("(?<=\\})(?=\\{)"); 

Exemple:

String str = "{id:\"123\",name:\"myName\"}{id:\"456\",name:\"yetanotherName\"}{id:\"456\",name:\"anotherName\"}"; 
String[] strs = str.split("(?<=\\})(?=\\{)"); 
for (String s : strs) { 
    System.out.println(s);   
} 

drukuje

{id:"123",name:"myName"} 
{id:"456",name:"anotherName"} 
{id:"456",name:"yetanotherName"} 

Jeśli obiekty są bardziej skomplikowane, regex prawdopodobnie nie działa i trzeba by przeanalizować swój łańcuch.

+1

świetnie! Dziękuję Ci! Idealne rozwiązanie. =) – Rebeka

+0

utknął z tym samym problemem. To działało jak urok. Dzięki @dystroy :) –

Powiązane problemy