Извлечение JSON из Applescript - PullRequest
0 голосов
/ 20 марта 2019

У меня есть этот JSON-файл, и мне нужно извлечь из него данные:

{
        "data1": "Hello",
        "data2":[
            {
                "value1": "1092",
                "value2": "1242",
                "value3": "4234",
            }
        ],
        "data3": "Bye"
}

Я знаю, как получить значение из "data1" и "data3" с помощью этого куска кода

set mJson to do shell script "curl -s 'https://apiURL...'"
set AppleScript's text item delimiters to {","}
set keyValueList to (every text item in mJson) as list
set AppleScript's text item delimiters to ""

set theKeyValuePair to item 3 of keyValueList
set AppleScript's text item delimiters to {": "}
set theKeyValueBufferList to (every text item in theKeyValuePair) as list
set AppleScript's text item delimiters to ""
set theValue to item 2 of theKeyValueBufferList
set value to do shell script "sed s/[^0-9.,]//g <<< " & theValue
return "$" & text 1 thru 7 of value

Но как получить значение в "data2"> "value1", поскольку оно входит в «подкатегорию» файла JSON?

Может кто-нибудь мне помочь?

1 Ответ

1 голос
/ 20 марта 2019

Разбор JSON с ванильным AppleScript довольно раздражает.

Вы можете использовать вспомогательное приложение, например JSON Helper , или вы можете сделать это с помощью фреймворка Foundation

set json to "{\"data1\": \"Hello\",\"data2\":[{\"value1\": \"1092\",\"value2\": \"1242\",\"value3\": \"4234\",
}],\"data3\": \"Bye\"}"

set foundationString to current application's NSString's stringWithString:json
set jsonData to foundationString's dataUsingEncoding:(current application's NSUTF8StringEncoding)
set {dataDictionary, jsonError} to current application's NSJSONSerialization's JSONObjectWithData:jsonData options:0 |error|:(reference)
if jsonError is missing value then
    set data1 to (dataDictionary's objectForKey:"data1") as text
    set data2 to (dataDictionary's objectForKey:"data2")'s objectAtIndex:0
    set value1 to (data2's objectForKey:"value1") as text
end if
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...