遍历JSON数组

huangapple go评论96阅读模式
英文:

Iterating over a JSON array

问题

以下是您提供的代码的翻译部分:

  1. 我有以下的JSON数组;
  2. ```json
  3. "json_array": [
  4. {
  5. "key": "k1",
  6. "value": "v1"
  7. },
  8. {
  9. "key": "k2",
  10. "value": "v2"
  11. }
  12. ]

需要将值列出为v1,v2。

目前,我能够分别列出键和值,但不能分开列出:

k1:v1
k2:v2

k1
k2

v1
v2

我尝试获得类似于:
v1,v2 但我不确定如何进行迭代,就像如果我只需要打印一个值,要么是v1要么是v2。如果有人能帮我解决Python 3中的逻辑,那将非常好。

编辑后的代码:

json_array = [
[
{
"key": "k1",
"value": "v1"
},
{
"key": "k1",
"value": "v2"
}
],
[
{
"key": "k1",
"value": "v3"
},
{
"key": "k2",
"value": "v4"
}
],
[
{
"key": "k2",
"value": "v5"
},
{
"key": "k3",
"value": "v6"
}
]
]
itemcount = 0

for item in json_array:
print(item)
values = []

  1. for kv in item:
  2. if 'value' in kv:
  3. values.append(kv['value'])
  4. print(', '.join([kv['key']] + values))

输出:

[{'key': 'k1', 'value': 'v1'}, {'key': 'k1', 'value': 'v2'}]
k1, v1, v2
[{'key': 'k1', 'value': 'v3'}, {'key': 'k2', 'value': 'v4'}]
k2, v3, v4
[{'key': 'k2', 'value': 'v5'}, {'key': 'k3', 'value': 'v6'}]
k3, v5, v6

期望输出:

k1, v1, v2, v3
k2, v4, v5
k3, v6

  1. 如果您需要进一步的帮助,请告诉我。
  2. <details>
  3. <summary>英文:</summary>
  4. I have the following JSON array;

"json_array": [
{
"key": "k1",
"value": "v1"
},
{
"key": "k2",
"value": "v2"
}
]

  1. Need to list values as v1,v2.
  2. Currently, I am able to list the keys and values separately as follows, but as a whole, not separately:
  3. k1:v1
  4. k2:v2
  5. or
  6. k1
  7. k2
  8. or
  9. v1
  10. v2
  11. I was trying to get something like:
  12. v1,v2 but I&#39;m not sure how to go about the iteration, like if I just need to print one value either v1 or v2. If someone could help me with the logic in Python 3, that would be really great.
  13. Edited code:
  14. json_array = [
  15. [
  16. {
  17. &quot;key&quot;: &quot;k1&quot;,
  18. &quot;value&quot;: &quot;v1&quot;
  19. },
  20. {
  21. &quot;key&quot;: &quot;k1&quot;,
  22. &quot;value&quot;: &quot;v2&quot;
  23. }
  24. ],
  25. [
  26. {
  27. &quot;key&quot;: &quot;k1&quot;,
  28. &quot;value&quot;: &quot;v3&quot;
  29. },
  30. {
  31. &quot;key&quot;: &quot;k2&quot;,
  32. &quot;value&quot;: &quot;v4&quot;
  33. }
  34. ],
  35. [
  36. {
  37. &quot;key&quot;: &quot;k2&quot;,
  38. &quot;value&quot;: &quot;v5&quot;
  39. },
  40. {
  41. &quot;key&quot;: &quot;k3&quot;,
  42. &quot;value&quot;: &quot;v6&quot;
  43. }
  44. ]
  45. ]
  46. itemcount = 0
  47. for item in json_array:
  48. print(item)
  49. values = []
  50. for kv in item:
  51. if &#39;value&#39; in kv:
  52. values.append(kv[&#39;value&#39;])
  53. print(&#39;, &#39;.join([kv[&#39;key&#39;]] + values))
  54. Output:
  55. [{&#39;key&#39;: &#39;k1&#39;, &#39;value&#39;: &#39;v1&#39;}, {&#39;key&#39;: &#39;k1&#39;, &#39;value&#39;: &#39;v2&#39;}]
  56. k1, v1, v2
  57. [{&#39;key&#39;: &#39;k1&#39;, &#39;value&#39;: &#39;v3&#39;}, {&#39;key&#39;: &#39;k2&#39;, &#39;value&#39;: &#39;v4&#39;}]
  58. k2, v3, v4
  59. [{&#39;key&#39;: &#39;k2&#39;, &#39;value&#39;: &#39;v5&#39;}, {&#39;key&#39;: &#39;k3&#39;, &#39;value&#39;: &#39;v6&#39;}]
  60. k3, v5, v6
  61. Expected output:
  62. k1, v1, v2, v3
  63. k2, v4, v5
  64. k3, v6
  65. </details>
  66. # 答案1
  67. **得分**: 1
  68. 这是您要翻译的代码部分:
  69. ```python
  70. json_array = [
  71. {
  72. "key": "k1",
  73. "value": "v1"
  74. },
  75. {
  76. "key": "k2",
  77. "value": "v2"
  78. }
  79. ]
  80. itemcount = 0
  81. values = []
  82. for item in json_array:
  83. print(f'Item => {itemcount}')
  84. itemcount += 1
  85. if 'value' in item:
  86. print(f"Value => {item['value']}")
  87. values.append(item['value'])
  88. print(', '.join(values))

这将为您提供以下输出:

  1. Item => 0
  2. Value => v1
  3. Item => 1
  4. Value => v2
  5. v1, v2

如果您只想要v1, v2作为输出,可以使用以下代码:

  1. values = []
  2. for item in json_array:
  3. if 'value' in item:
  4. values.append(item['value'])
  5. print(', '.join(values))

我们在这里的操作是遍历列表中的每个项。每个项都是一个字典。我们询问字典是否有'value'属性。如果有,我们将其添加到列表中。

最后,我们使用', '分隔符连接列表。

您可以根据需要修改这个代码来获得所需的输出。希望这能帮助您入门。

英文:

You could do something like this:

  1. json_array = [
  2. {
  3. &quot;key&quot;: &quot;k1&quot;,
  4. &quot;value&quot;: &quot;v1&quot;
  5. },
  6. {
  7. &quot;key&quot;: &quot;k2&quot;,
  8. &quot;value&quot;: &quot;v2&quot;
  9. }
  10. ]
  11. itemcount = 0
  12. values = []
  13. for item in json_array:
  14. print(f&#39;Item =&gt; {itemcount}&#39;)
  15. itemcount += 1
  16. if &#39;value&#39; in item:
  17. print(f&quot;Value =&gt; {item[&#39;value&#39;]}&quot;)
  18. values.append(item[&#39;value&#39;])
  19. print(&#39;, &#39;.join(values))

That'll give you output like this:

  1. Item =&gt; 0
  2. Value =&gt; v1
  3. Item =&gt; 1
  4. Value =&gt; v2
  5. v1, v2

If you just wanted v1, v2 as the output, you could just do this:

  1. values = []
  2. for item in json_array:
  3. if &#39;value&#39; in item:
  4. values.append(item[&#39;value&#39;])
  5. print(&#39;, &#39;.join(values))

What are we doing here?

We loop through each item in the list. Each item is a dictionary. We ask the dictionary if it has 'value' property. If it has, then we add it to a list.

Finally, we join the list with ', ' separator.

You can morph this to whatever output you desire. Hope this gets you started.


EDIT

What if you have an nested lists/arrays?

  1. json_array = [
  2. [
  3. {
  4. &quot;key&quot;: &quot;k1&quot;,
  5. &quot;value&quot;: &quot;v1&quot;
  6. },
  7. {
  8. &quot;key&quot;: &quot;k2&quot;,
  9. &quot;value&quot;: &quot;v2&quot;
  10. }
  11. ],
  12. [
  13. {
  14. &quot;key&quot;: &quot;k1&quot;,
  15. &quot;value&quot;: &quot;v3&quot;
  16. },
  17. {
  18. &quot;key&quot;: &quot;k2&quot;,
  19. &quot;value&quot;: &quot;v4&quot;
  20. }
  21. ]
  22. ]
  23. itemcount = 0
  24. values = []
  25. for item in json_array:
  26. print(f&#39;Item =&gt; {itemcount}&#39;)
  27. itemcount += 1
  28. for kv in item:
  29. if &#39;value&#39; in kv:
  30. print(f&quot;Value =&gt; {kv[&#39;value&#39;]}&quot;)
  31. values.append(kv[&#39;value&#39;])
  32. print(&#39;, &#39;.join(values))

The result will be:

  1. Item =&gt; 0
  2. Value =&gt; v1
  3. Value =&gt; v2
  4. Item =&gt; 1
  5. Value =&gt; v3
  6. Value =&gt; v4
  7. v1, v2, v3, v4

EDIT 2

If you want v1, v2 in one line and v3, v4 in another line

You could use a slightly modified code to print v1, v2 in one line and v3, v4 in another line.

  1. json_array = [
  2. [
  3. {
  4. &quot;key&quot;: &quot;k1&quot;,
  5. &quot;value&quot;: &quot;v1&quot;
  6. },
  7. {
  8. &quot;key&quot;: &quot;k2&quot;,
  9. &quot;value&quot;: &quot;v2&quot;
  10. }
  11. ],
  12. [
  13. {
  14. &quot;key&quot;: &quot;k1&quot;,
  15. &quot;value&quot;: &quot;v3&quot;
  16. },
  17. {
  18. &quot;key&quot;: &quot;k2&quot;,
  19. &quot;value&quot;: &quot;v4&quot;
  20. }
  21. ]
  22. ]
  23. itemcount = 0
  24. for item in json_array:
  25. print(f&#39;Item =&gt; {itemcount}&#39;)
  26. itemcount += 1
  27. values = []
  28. for kv in item:
  29. if &#39;value&#39; in kv:
  30. print(f&quot;Value =&gt; {kv[&#39;value&#39;]}&quot;)
  31. values.append(kv[&#39;value&#39;])
  32. print(&#39;, &#39;.join(values))

The result will be:

  1. Item =&gt; 0
  2. Value =&gt; v1
  3. Value =&gt; v2
  4. v1, v2
  5. Item =&gt; 1
  6. Value =&gt; v3
  7. Value =&gt; v4
  8. v3, v4

It seems like OP has figured this out already; great job.


EDIT 3

What if we want key, value1, value2, ...?

  1. json_array = [
  2. [
  3. {
  4. &quot;key&quot;: &quot;k1&quot;,
  5. &quot;value&quot;: &quot;v1&quot;
  6. },
  7. {
  8. &quot;key&quot;: &quot;k1&quot;,
  9. &quot;value&quot;: &quot;v2&quot;
  10. }
  11. ],
  12. [
  13. {
  14. &quot;key&quot;: &quot;k1&quot;,
  15. &quot;value&quot;: &quot;v3&quot;
  16. },
  17. {
  18. &quot;key&quot;: &quot;k2&quot;,
  19. &quot;value&quot;: &quot;v4&quot;
  20. }
  21. ],
  22. [
  23. {
  24. &quot;key&quot;: &quot;k2&quot;,
  25. &quot;value&quot;: &quot;v5&quot;
  26. },
  27. {
  28. &quot;key&quot;: &quot;k3&quot;,
  29. &quot;value&quot;: &quot;v6&quot;
  30. }
  31. ]
  32. ]
  33. itemcount = 0
  34. values = {}
  35. for item in json_array:
  36. itemcount += 1
  37. for kv in item:
  38. if kv[&#39;key&#39;] not in values:
  39. values[kv[&#39;key&#39;]] = []
  40. values[kv[&#39;key&#39;]].append(kv[&#39;value&#39;])
  41. for key in values:
  42. print(key + &#39;, &#39; + &#39;, &#39;.join(values[key]))

will result in:

  1. k1, v1, v2, v3
  2. k2, v4, v5
  3. k3, v6

huangapple
  • 本文由 发表于 2023年6月26日 23:33:51
  • 转载请务必保留本文链接:https://go.coder-hub.com/76558172.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定