2017-04-23 43 views
-2

我想要做的是迭代。我有這行代碼在一列在一個表在我的數據庫:如何將文本轉換爲字典以便在python中迭代它?

[{u"item": 5, u"quantity": 2},{u"item": 6, u"quantity": 1}] 

我給你這一個變量順序,所以我有:

order = [{u"item": 5, u"quantity": 2},{u"item": 6, u"quantity": 1}] 

然後 我想重複它。我正在嘗試以下操作:

for o in order.items(): 
     product = o['item'] 
     ... 

它不起作用。我如何轉換它?

for order in orders: 
     ord = order.shopping_cart_details # [{u"item": 5, u"quantity": 2},{u"item": 6, u"quantity": 1}] 
     temp = {'order_id': order.id, 'movies': ord['item'], 'created': order.created} 
     full_results.append(temp) 

我得到的字符串索引必須是整數

+0

您忘記了包含完整的錯誤信息。我可以猜測它會是'AttributeError',因爲列表對象沒有'.items()'方法,但是請使*顯式爲*。 *不起作用*不是問題描述。 –

+0

@MartijnPieters我編輯我的問題.. – CodeL

+0

請包括*完整追溯*。這包含了很多我們現在不得不猜測的信息。 –

回答

0

假設的順序是一個字符串

order = '[{"item": 5, "quantity": 2},{"item": 6, "quantity": 1}]' 

def doSomething(): 
    import json 
    ord = json.loads(order) 
    values =[ v['item'] for v in ord] # if u want a single item u put values = v.pop()['item'] 
0

你能檢查返回的數據類型從數據庫中檢索數據後,輸入以下代碼:

[{u"item": 5, u"quantity": 2},{u"item": 6, u"quantity": 1}] 

使用type(order)確定類型的回報價值。可能是上述數據的返回數據是字符串格式。在這種情況下,當您將列表存儲到數據庫中時,您可能會考慮先使用json.dumps()來轉換數據,然後在您檢索數據時,您可以使用json.loads()獲取原始數據類型。在這種情況下,您可能會考慮將數據庫列類型更改爲blob

+0

我檢查它,你是正確的。我以字符串形式存儲在數據庫中。如果我改變它,並以你的方式做,我可以稍後迭代它?我想獲得數組中的每一項。謝謝! – CodeL

+0

如果您將上述信息存儲在json.dumps()之後,那麼在從數據庫檢索信息之後,您可能只需執行json.loads()。例如,order = database.getdata()then order = json.loads(order),在此步驟之後,您可以使用:for each_item in order:item_id = every_item ['item'] item_quantity = every_item ['quantity']。請改變縮進和格式。 –

0

還是要使它更簡單,你可以使用eval功能。

order = '[{u"item": 5, u"quantity": 2},{u"item": 6, u"quantity": 1}]' 
order = eval(order) 
for o in order: 
    product = o['item'] 
    print product