проблема с NotesJSONNavigator в lotusscript - PullRequest
0 голосов
/ 13 января 2019

У меня есть следующий агент для тестирования нового парсера V10 JSON Json в коде получен из даркской погоды api

Option Public
Option Declare

Sub Initialize
    Dim json As String
    Dim session As New NotesSession

    json = |{
"latitude": 51.2747748,
"longitude": 4.4433923,
"timezone": "Europe/Brussels",
"daily": {
    "summary": "Rain today, with high temperatures falling to 3øC next Sunday.",
    "icon": "rain",
    "data": [{
        "time": 1547334000,
        "summary": "Rain in the afternoon and breezy starting in the afternoon.",
        "icon": "rain",
        "sunriseTime": 1547365378,
        "sunsetTime": 1547395251,
        "moonPhase": 0.23,
        "precipIntensity": 0.4115,
        "precipIntensityMax": 1.5621,
        "precipIntensityMaxTime": 1547380800,
        "precipProbability": 0.97,
        "precipType": "rain",
        "temperatureHigh": 10.56,
        "temperatureHighTime": 1547391600,
        "temperatureLow": 5.5,
        "temperatureLowTime": 1547449200,
        "apparentTemperatureHigh": 10.56,
        "apparentTemperatureHighTime": 1547391600,
        "apparentTemperatureLow": 2.06,
        "apparentTemperatureLowTime": 1547427600,
        "dewPoint": 6.77,
        "humidity": 0.87,
        "pressure": 1009.48,
        "windSpeed": 7.24,
        "windGust": 17.26,
        "windGustTime": 1547395200,
        "windBearing": 285,
        "cloudCover": 0.93,
        "uvIndex": 1,
        "uvIndexTime": 1547377200,
        "visibility": 12.59,
        "ozone": 311.57,
        "temperatureMin": 7.17,
        "temperatureMinTime": 1547416800,
        "temperatureMax": 10.56,
        "temperatureMaxTime": 1547391600,
        "apparentTemperatureMin": 2.64,
        "apparentTemperatureMinTime": 1547416800,
        "apparentTemperatureMax": 10.56,
        "apparentTemperatureMaxTime": 1547391600
    }]
},
"offset": 1
}|

    json = removeCRLF(json)
    Dim jsnav As NotesJSONNavigator 
    Set jsnav = session.CreateJSONNavigator(json)
    Dim el As NOTESJSONELEMENT
    Set el = jsnav.getelementbypointer("/latitude")
    Print CStr(el.value)
End Sub
Function removeCRLF(json) As String
    removeCRLF =Replace(Replace(json, Chr(13), ""),Chr(10),"")
End Function

Я получаю эту ошибку при запуске агента:

Невозможно проанализировать строку JSON: Отсутствует запятая или '}' после члена объекта. смещение 1791

После некоторого тестирования я обнаружил, что ошибка исходит из специального символа в json (ø в '... падает до 3ºC далее ...').

Кто-нибудь может мне помочь, как избежать / преобразовать символы, которые могут вызвать проблемы при разборе JSON?

PS: анализатор JSON openntf правильно обрабатывает json.

Ответы [ 3 ]

0 голосов
/ 14 января 2019

Если вы можете сохранить JSON в файловую систему, вы сможете прочитать его как UTF-8, а затем использовать JSONNav, чтобы получить искомое значение.

Sub Initialize
    Dim json As Variant
    Dim session As New NotesSession
    Dim inbuf As NotesStream
    Dim path As String

    path = "c:\\jsontest.json"  
    Set inbuf = session.Createstream()
    If Not(inbuf.Open(path, "UTF-8")) Then
        Print "Unable to open JSON file"
        Exit Sub
    End If
    json = inbuf.Read()

    If IsArray(json) then
        Dim jsnav As NotesJSONNavigator
        Set jsnav = session.CreateJSONNavigator(json)
        Dim el As NotesJSONElement
        Set el = jsnav.getelementbypointer("/latitude")
        Print CStr(el.value)
    Else
        Print "JSON is nothing"
    End If
End Sub

Работа, чтобы получить лучший ответ о том, как это сделать с помощью встроенного JSON.

0 голосов
/ 29 мая 2019

10.0.1 FP2 имеет исправление для этого и теперь доступно для загрузки: https://www -01.ibm.com / support / docview.wss? Uid = ibm10871936 . Вы захотите использовать новое свойство PreferJSONNavigator по запросу. Подробности см. В этом техническом замечании https://www -01.ibm.com / support / docview.wss? Uid = ibm10875724

0 голосов
/ 13 января 2019

Это должно быть проблемой кодировки, и, конечно же, есть свойство, которое кажется уместным. Проверьте значение jsnav.PreferUTF8. Здесь задокументировано: ссылка . Они не говорят, что по умолчанию. Если это правда, установите значение false. Если это неверно, установите его в true.

...