mam do czynienia z systemami, które manipulują „zrelaksowany” danych JSON, który zawiera shell-styl #
linię komentuje:tworzenie powłoki komentarze w stylu JSON
[
{
# Batman
"first-name": "Bruce",
"last-name": "Wayne"
},
{
# Superman
"first-name": "Clark",
"last-name": "Kent"
}
]
Część systemu pracuję nad zastosowaniami json-lib - co jest dla mnie zaskoczeniem odkryciem, jest tolerancyjny dla komentarzy w stylu powłoki - do przeanalizowania danych wejściowych JSON.
muszę wyodrębnić kilka dodatkowych adnotacji z tych uwag, ale json-lib wydaje się po prostu odrzucić je bez zapewniając API dla ich czytanie:
JSONObject map = (JSONObject)JSONSerializer.toJSON("{\n"+
" # Batman\n" + // note the shell-style # comment
" \"first-name\": \"Bruce\",\n" +
" \"last-name\": \"Wayne\"\n" +
"}");
System.out.println(map.toString());
/* <<'OUTPUT'
* {"first-name":"Bruce","last-name":"Wayne"}
* OUTPUT
* note the absence of the shell-style comment
*/
Ma to sens, ponieważ komentarze nie są częścią Specyfikacja JSON i mam szczęście, json-lib nie dusi się, gdy parsuje je w pierwszej kolejności.
Z dopiskiem:
- inne systemy zużywają tę samą JSON i adnotacje muszą być przejrzyste dla nich, więc struktura JSON nie mogą być modyfikowane przez dodanie właściwości komentarzach zamiast.
- Nie wszystkie komponenty i obiekty w moim systemie mają dostęp do surowego źródła JSON: jeden komponent odczytuje plik i analizuje go za pomocą JSONlib i przekazuje zdesetyzowane mapy itp.
Jak mogę odczytać i przeanalizować te komentarze podczas przetwarzania danych wejściowych JSON? Czy istnieje biblioteka, która pozwoli mi je odczytać i powiązać z ich pozycją w JSON - czy mogę łatwo połączyć komentarz Batman
do wpisu "Bruce Wayne"?
Obecnie używam json-lib, ale jestem otwarty na zbadanie innych bibliotek JSON i równie otwartych na używanie innych języków, które rozszerzają JSON, takich jak YAML - ale nie jestem pewien, czy te narzędzia pozwolą mi przeczytaj i przetwórz komentarze na moim wejściu.
http://www.lifl.fr/~riquetd/parse-a-json-file-with-comments.html Ten link używa wyrażenia regularnego: ''(^)? [^ \ S \ n] */(?: \ * (. *?) \ */[^ \ S \ n] * |/[^ \ n] *) ($)? ', Aby usunąć komentarze. Oczywiście możesz użyć tego samego wyrażenia regularnego do innych celów. –
@remyabel - Nie wszystkie komponenty i obiekty w moim systemie mają dostęp do surowego źródła JSON: jeden komponent odczytuje plik i analizuje go za pomocą JSONlib i przekazuje zdesetyzowane mapy itp. –
zawsze możesz nie umieszczać sensownych danych w lokalizacji "wyrzucania"? tak jak nie przechowuję moich ważnych rzeczy w kosza na śmieci poza moim domem ... – jtahlborn