2017-04-19 63 views
0

我正在使用一種API,該API需要在創建資源時對json鍵值對進行排序。該API提供了一種方法(稱爲new),允許您創建一個GET請求來返回對象模型。我想用我的RobotFramework測試用例中的值更新模型。在Robot Framework中是否有本地方式來發出GET請求並保留服務器發送的json對象順序?這裏的JSON響應獲取新方法的一個例子:如果我使用下面的鍵值被自動地整理如何保存機器人框架中的Json對象順序

{ 
"account": { 
    "@id": "", 
    "@uri": "", 
    "@oldID": "", 
    "person": { 
     "@id": "", 
     "@uri": "" 
    }, 
    "accountType": { 
     "@id": "", 
     "@uri": "", 
     "name": null 
    }, 
    "accountName": "", 
    "createdDate": null, 
    "createdByPerson": { 
     "@id": "", 
     "@uri": "" 
    }, 
    "lastUpdatedDate": null, 
    "lastUpdatedByPerson": { 
     "@id": "", 
     "@uri": "" 
    } 
} 

}

${r}= GET Request MySession /accounts/new 
+0

你不能依賴任何字典中的鍵的順序。這種結構甚至沒有規定順序 - 即,沒有任何訂單。從這個角度來看,json並不僅僅是字典和列表的嵌套結構。見例如這:http://stackoverflow.com/questions/4515676/keep-the-order-of-the-json-keys-during-json-conversion-to-csv –

+0

@JanKovařík一般來說你是正確的,但RF是一個特殊情況 - 其中的字典基於[OrderedDict](https://docs.python.org/2/library/collections.html#collections.OrderedDict),因此插入順序被保留。 – Todor

+0

@pgtips - 你正在使用RequestsLibrary,對吧?我沒有看到任何東西,它會重新排序響應鍵......你確定它不是服務器把它們放在意外的順序嗎?手動觸發相同的請求會生成與RF中不同的結構? – Todor

回答

0

爲別人誰需要在機器人框架下令JSON,我可以用下面的(感謝的意見,以幫助)來實現它:

&{object}= Evaluate json.loads('''${r.text}''', object_pairs_hook=collections.OrderedDict) modules=json, collections 

儘管,最終這種邏輯可能最適合於定製助手庫。