<pre class="lang-py prettyprint-override"><code>>>> jsn['attributes']['173'].keys()
dict_keys(['id', 'code', 'label', 'options', 'position'])
</code></pre>
<p>正如您所看到的,产品不在那里,这就是代码不起作用的原因。您正确地解析了JSON</p>
<p>稍微格式化一下JSON</p>
<pre><code>{
"attributes": {
"173": {
"id": "173",
"code": "Size",
"label": "Size",
"options": [
{
"id": "352",
"label": "Footwear-41",
"products": [
"78834"
]
},
{
"id": "355",
"label": "Footwear-42",
"products": [
"78835"
]
},
{
"id": "357",
"label": "Footwear-42.5",
"products": [
"78836"
]
},
... much more
</code></pre>
<p>深入研究JSON会更容易一些。我看到的唯一与大小相关的属性是各种选项的<code>label</code>键。对吗?如果是这样的话,您就必须对键进行筛选,然后<code>options</code>列表才能执行您想要的操作</p>
<p>所以。。假设选项列表是这样分配的:</p>
<pre class="lang-py prettyprint-override"><code>options = obj['attributes']['173']['options']
</code></pre>
<p>然后,您可以将列表向下筛选到您想要的产品,如下所示:</p>
<pre class="lang-py prettyprint-override"><code>>>> size = 42
>>> list(filter(lambda x: x['label'][-1 * len(str(size)):] == str(size), options))
[{'id': '355', 'label': 'Footwear-42', 'products': ['78835']}]
</code></pre>
<hr/>
<p>那么,<code>lambda x: x['label'][-1 * len(str(size)):]</code>做什么呢?这是一个lambda,它有效地做到了:</p>
<pre class="lang-py prettyprint-override"><code>size = 42
def filter_product(product_object):
label = product_object['label']
product_size = [-1 * len(str(size)):] # get the last digits of the str that are the size
if str(size) == product_size:
return True
else:
return False
</code></pre>
<p>我根据大小float/int的长度查看标签的最后<code>n</code>位。然后我把它和你想要的尺寸比较一下,如果是一样的,那么这就是你要找的产品</p>