Seite 1 von 1

JSON mit escapedten Zeichen

Verfasst: 23.01.2016 15:00
von Andesdaf
Vielleicht stehe ich ja komplett auf dem Schlauch, aber wie bekomme ich diese escapedten Zeichen
korrekt umgewandelt?

Code: Alles auswählen

zText.s = ~"{\"parse\":\"Kl\\u00e4rung, S\\u00fcden\"}"

iJSON = ParseJSON(#PB_Any, zText)
Debug ComposeJSON(iJSON)

Re: JSON mit escapedten Zeichen

Verfasst: 23.01.2016 16:06
von Nino
Die JSON-Bibliothek versucht anscheinend, die Unicode-Escape-Sequenzen umzuwandeln. Das funktioniert allerdings nicht, es scheint ein Bug in der Bibliothek zu sein.

Code: Alles auswählen

zText.s = ~"{\"parse\":\"Kl\\u00e4rung, S\\u00fcden\"}"
MessageRequester("OK", zText)

iJSON = ParseJSON(#PB_Any, zText)

obj = JSONValue(iJSON)

msg$ = ""
If ExamineJSONMembers(obj)
   While NextJSONMember(obj)
      msg$ + JSONMemberKey(obj) + " = " + GetJSONString(JSONMemberValue(obj)) + #CRLF$
   Wend
EndIf
MessageRequester("Fehler", msg$)

MessageRequester("Fehler", ComposeJSON(iJSON))
Daher muss man es zur Zeit wohl mit einer kleinen Prozedur selbst machen:

Code: Alles auswählen

Procedure.s DecodeUnicodeChars(s$)
   Protected pos.i, code$, char$
   
   pos = FindString(s$, "\u")
   While pos
      code$ = Mid(s$, pos, 6)
      char$ = Chr(Val("$" + Mid(code$, 3)))
      s$ = ReplaceString(s$, code$, char$)
      pos = FindString(s$, "\u", pos+1)
   Wend
   
   ProcedureReturn s$
EndProcedure


zText.s = ~"{\"parse\":\"Kl\\u00e4rung, S\\u00fcden\"}"

zText = DecodeUnicodeChars(zText)
Debug zText

iJSON = ParseJSON(#PB_Any, zText)
Debug ComposeJSON(iJSON)

Re: JSON mit escapedten Zeichen

Verfasst: 23.01.2016 19:40
von freak
Yup, da hat sich beim decodieren der Unicode-Escapes ein Fehler eingeschlichen. Ist in der nächsten Version behoben.

Re: JSON mit escapedten Zeichen

Verfasst: 24.01.2016 21:24
von Andesdaf
Danke, dann behelfe ich mir bis dahin.

// EDIT: In PB 5.42 Beta 1 korrigiert. Danke! :allright: