допустимая строка json, но не может разобрать - PullRequest
0 голосов
/ 11 декабря 2019

моя среда это nodejs

let z = await x.text();
console.log(z)
let y = JSON.parse(z)

журнал консоли

{
   "errorCode":0,
   "errorMsg":"success",
   "result":{
      "msg":"\u4e70\u5bb6\u5df2",
      "uid":"104",
      "username":"\u738b\u626d",
      "userphone":"1565777778",
      "address":"\u4e0a\u6d77",
      "price":"5.00",
      "trade_state":"TRADE_SUCCESS",
      "hk_orderid":"1575524694820"
   }
}

(узел: 21) UnhandledPromiseRejectionWarning: SyntaxError: Неожиданный токен в JSON в позиции 0

когда я копирую строку json и вставляю ее в

JSON.parse('{"errorCode":0,"errorMsg":"success","result":{"msg":"\u4e70\u5bb6\u5df2","uid":"104","username":"\u738b\u626d","userphone":"1565777778","address":"\u4e0a\u6d77","price":"5.00","trade_state":"TRADE_SUCCESS","hk_orderid":"1575524694820"}}')

в консоли браузера

синтаксический анализ правильный

edit: кто-то спрашивает оjson, фактически json - это именно то, что я вставил выше

{
   "errorCode":0,
   "errorMsg":"success",
   "result":{
      "msg":"\u4e70\u5bb6\u5df2",
      "uid":"104",
      "username":"\u738b\u626d",
      "userphone":"1565777778",
      "address":"\u4e0a\u6d77",
      "price":"5.00",
      "trade_state":"TRADE_SUCCESS",
      "hk_orderid":"1575524694820"
   }
}

, это также вывод console.log (z)

ниже приведены некоторые дополнительные журналы, обратите внимание, что только последниеу каждого есть исключение

processing job id 19121211173822287103

12/12/2019 12:17:45 PM {"errorCode":0,"errorMsg":"success","result":{"msg":"\u7b49\u5f85\u8cb7\u5bb6\u4ed8\u6b3e","uid":"103","username":"\u674e\u767d","userphone":"18912345678","address":"\u7ef4\u4e5f\u7eb3\u9152\u5e97(\u77f3\u82b1\u897f\u8def\u5e97)","price":"4.00","trade_state":"WAIT_BUYER_PAY","hk_orderid":"1576120657890"}}

12/12/2019 12:17:50 PM processing job id 19121211173822287103

12/12/2019 12:17:50 PM {"errorCode":0,"errorMsg":"success","result":{"msg":"\u7b49\u5f85\u8cb7\u5bb6\u4ed8\u6b3e","uid":"103","username":"\u674e\u767d","userphone":"18912345678","address":"\u7ef4\u4e5f\u7eb3\u9152\u5e97(\u77f3\u82b1\u897f\u8def\u5e97)","price":"4.00","trade_state":"WAIT_BUYER_PAY","hk_orderid":"1576120657890"}}

12/12/2019 12:17:55 PM processing job id 19121211173822287103

12/12/2019 12:17:57 PM

12/12/2019 12:17:57 PM {"errorCode":0,"errorMsg":"success","result":{"msg":"\u4e70\u5bb6\u5df2\u652f\u4ed8","uid":"103","username":"\u674e\u767d","userphone":"18912345678","address":"\u7ef4\u4e5f\u7eb3\u9152\u5e97(\u77f3\u82b1\u897f\u8def\u5e97)","price":"4.00","trade_state":"TRADE_SUCCESS","hk_orderid":"1576120657890"}}

12/12/2019 12:17:57 PM (node:21) UnhandledPromiseRejectionWarning: SyntaxError: Unexpected token  in JSON at position 0

12/12/2019 12:17:57 PM at JSON.parse (<anonymous>)

12/12/2019 12:17:57 PM at /usr/src/app/routes/notify.js:39:26

Ответы [ 2 ]

0 голосов
/ 11 декабря 2019

Я думаю, await x.text() возвращает вам объект, а не строку. Но в нем мало непарсированных символов, поэтому вам придется сначала заформатировать объект, а затем проанализировать.

JSON.parse(JSON.stringify(z));

Для вас должна работать строка Abobe. Без stringify следует выдать ошибку, как показано ниже:

var z= {
   "errorCode":0,
   "errorMsg":"success",
   "result":{
      "msg":"\u4e70\u5bb6\u5df2",
      "uid":"104",
      "username":"\u738b\u626d",
      "userphone":"1565777778",
      "address":"\u4e0a\u6d77",
      "price":"5.00",
      "trade_state":"TRADE_SUCCESS",
      "hk_orderid":"1575524694820"
   }
}
 console.log(JSON.parse(z))

Но использование stringify должно работать как положено:

var z= {
   "errorCode":0,
   "errorMsg":"success",
   "result":{
      "msg":"\u4e70\u5bb6\u5df2",
      "uid":"104",
      "username":"\u738b\u626d",
      "userphone":"1565777778",
      "address":"\u4e0a\u6d77",
      "price":"5.00",
      "trade_state":"TRADE_SUCCESS",
      "hk_orderid":"1575524694820"
   }
}
 console.log(JSON.parse(JSON.stringify(z)))
0 голосов
/ 11 декабря 2019

Может потребоваться увидеть больше кода, поэтому, если вы извлекаете JSON с сервера / URL-адреса, убедитесь, что заголовок ответа показывает это как тип данных JSON

...