Как я могу разобрать строку JSON с префиксом 'u' - PullRequest
1 голос
/ 11 октября 2019

У меня есть строка JSON, которую я пытаюсь проанализировать:

[{u'OrderItem': {u'OrderItemId': u'123456789', u'Title': u'Product Title', u'QuantityShipped': u'0', u'IsTransparency': u'false', u'QuantityOrdered': u'1', u'ItemTax': {u'CurrencyCode': u'USD', u'Amount': u'0.00'}, u'ASIN': u'123456789', u'SellerSKU': u'BBB-123456789', u'ConditionSubtypeId': u'New', u'ConditionId': u'New', u'PromotionDiscountTax': {u'CurrencyCode': u'USD', u'Amount': u'0.00'}, u'TaxCollection': {u'Model': u'MarketplaceFacilitator', u'ResponsibleParty': u'Random Services, Inc.'}, u'PromotionDiscount': {u'CurrencyCode': u'USD', u'Amount': u'0.00'}, u'ItemPrice': {u'CurrencyCode': u'USD', u'Amount': u'100.35'}, u'ProductInfo': {u'NumberOfItems': u'1'}, u'IsGift': u'false'}}]

Я не уверен, почему, но каждая часть JSON имеет префикс с буквой 'u', и я не уверен, чтоя могу сделать, чтобы разобрать это.

Я читал онлайн, что в python это нормально, но в rails я просто получаю сообщение об ошибке, есть ли способ разобрать это в JSON?

Ответы [ 2 ]

2 голосов
/ 11 октября 2019

Если возможно, я бы проверил, можно ли сконфигурировать данные, предоставленные webhook, в надлежащий JSON. Если нет, я бы позволил Python преобразовать строку в JSON, поскольку вы говорите, что она там читаема.

У меня нет опыта использования Python, поэтому, возможно, есть лучший способ сделать это, но что-то вроде этого поможет:

# to_json.py
import sys
import ast
import json

input  = sys.stdin.read().strip()
output = ''

if input:
    object = ast.literal_eval(input)
    output = json.dumps(object)

print(output)

Теперь в Ruby вы можете сделать следующее:

require 'json' # not needed in Rails

string = "[{u'OrderItem': {u'OrderItemId': u'123456789', u'Title': u'Product Title', u'QuantityShipped': u'0', u'IsTransparency': u'false', u'QuantityOrdered': u'1', u'ItemTax': {u'CurrencyCode': u'USD', u'Amount': u'0.00'}, u'ASIN': u'123456789', u'SellerSKU': u'BBB-123456789', u'ConditionSubtypeId': u'New', u'ConditionId': u'New', u'PromotionDiscountTax': {u'CurrencyCode': u'USD', u'Amount': u'0.00'}, u'TaxCollection': {u'Model': u'MarketplaceFacilitator', u'ResponsibleParty': u'Random Services, Inc.'}, u'PromotionDiscount': {u'CurrencyCode': u'USD', u'Amount': u'0.00'}, u'ItemPrice': {u'CurrencyCode': u'USD', u'Amount': u'100.35'}, u'ProductInfo': {u'NumberOfItems': u'1'}, u'IsGift': u'false'}}]"

json = IO.popen('python to_json.py', 'r+') do |io|
  io.puts(string)
  io.close_write # closing write sends EOF, signalling the end of input
  io.read
end

JSON.parse(json)
#=> [{"OrderItem"=>{"ASIN"=>"123456789", "ConditionId"=>"New", "OrderItemId"=>"123456789", "Title"=>"Product Title", "IsGift"=>"false", "ConditionSubtypeId"=>"New", "SellerSKU"=>"BBB-123456789", "PromotionDiscountTax"=>{"CurrencyCode"=>"USD", "Amount"=>"0.00"}, "TaxCollection"=>{"Model"=>"MarketplaceFacilitator", "ResponsibleParty"=>"Random Services, Inc."}, "PromotionDiscount"=>{"CurrencyCode"=>"USD", "Amount"=>"0.00"}, "ItemPrice"=>{"CurrencyCode"=>"USD", "Amount"=>"100.35"}, "ProductInfo"=>{"NumberOfItems"=>"1"}, "QuantityShipped"=>"0", "IsTransparency"=>"false", "QuantityOrdered"=>"1", "ItemTax"=>{"CurrencyCode"=>"USD", "Amount"=>"0.00"}}}]

Примечание: Предполагается, что на вашем компьютере установлен Python и вы поместили скрипт Python в тот же рабочий каталог, что и скрипт Ruby.

Ссылки на Python:

Рубиновые ссылки:

0 голосов
/ 29 октября 2019

Не адаптируйся. Заставьте источник исправить их вывод.

Действительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...