передача строки JSON из iOS WKWebKit в JS, всегда ошибка - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь вызвать функцию в JS со строковым параметром из приложения iOS (swift). и я ожидаю, что структура данных, как:

[{"name":"Mat. Category","value":"PIPE"},
{"name":"Manufacturer","value":"Manufacturer 1"},
{"name":"Heat#","value":"78652457"},
{"name":"Manufacture Date","value":"2019-04-15"},
{"name":"Item Description","value":"8\" PIPE, 18\" LG"},
{"name":"Wall Thickness","value":"0.375IN"},
{"name":"Diameter","value":"24IN UPS"},
{"name":"Yield Strength","value":"35,000 psi"},
{"name":"Document Repository Link","value":"https://drive.google.com/drive/folders/1SPB7-R1p_UWEWnG9H6rx0SX3LTpDSG_L"}
];

Итак, это массив с некоторыми объектами. и я передаю его с iOS:

   webPage.evaluateJavaScript("cameraClosed(\(content))") { (res, error) in
            if error == nil{

                print("invoke successed")
                print("res:\(res)")
            }else{
                print("invoke failure")
                print(error)
            }
        }

содержимое является строкой. Я печатаю строку javascriptstring, которая передается в сеть:

распечатать "cameraClosed ((content))" =>

cameraClosed([{"name":"Mat. Category","value":"Aaron"},{"name":"Manufacturer","value":"Manufacturer 1"},{"name":"Heat#","value":"18616949864"},{"name":"Manufacture Date","value":"2019-04-14"},{"name":"Item Description","value":"8\" Steel Gas main - 50 Ft"},{"name":"Wall Thickness","value":"0.375IN"},{"name":"Diameter","value":"24IN UPS"},{"name":"Yield Strength","value":"35,000 psi"},{"name":"Document Repository Link","value":"https://drive.google.com/drive/folders/1SPB7-R1p_UWEWnG9H6rx0SX3LTpDSG_L"}])

и в сети, я могу получить это успешно, вот мой код React:

 window.cameraClosed = (content) => {

      if (typeof (content) == "string") {
        window.webkit.messageHandlers.messageRecieved.postMessage("is String");
      }else{
        window.webkit.messageHandlers.messageRecieved.postMessage("is Object");
      }
}

и я печатаю content, полученный в React (используя messageHandlers), поскольку content получен из QR-кода, поэтому я не могу отладить его на ПК, я могу использовать только устройство iOS и встраивать WKWebView :

(
        {
        name = "Mat. Category";
        value = Aaron;
    },
        {
        name = Manufacturer;
        value = "Manufacturer 1";
    },

        {
        name = "Heat#";
        value = 18616949864;
    },
        {
        name = "Manufacture Date";
        value = "2019-04-14";
    },
        {
        name = "Item Description";
        value = "8\" Steel Gas main - 50 Ft";
    },
        {
        name = "Wall Thickness";
        value = "0.375IN";
    },
        {
        name = Diameter;
        value = "24IN UPS";
    },
        {
        name = "Yield Strength";
        value = "35,000 psi";
    },
        {
        name = "Document Repository Link";
        value = "https://drive.google.com/drive/folders/1SPB7-R1p_UWEWnG9H6rx0SX3LTpDSG_L";
    }
)

Я не знаю, почему это превращает квадратные скобки в скобки. И это действительно смутило меня. Я просто хочу правильную структуру данных, как я уже упоминал ранее. он исходит из QRCode, и я думаю, что я делаю правильную структуру данных в QRCode, но я не знаю, почему она изменилась после передачи ее в сеть.

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

1 Ответ

0 голосов
/ 23 апреля 2019

Я исправил это, выполнив stringify еще раз:

 let string = JSON.stringify(content)
 let jsonArry = JSON.parse(string)

тогда квадратные скобки возвращаются.

...