2017-04-19 65 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 

尽管,最终这种逻辑可能最适合于定制助手库。