合并JSON对象的方法

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

a way to combine/merge objects in json

问题

我有这种不方便的数据输出,如下所示:

  1. [
  2. {
  3. "object_a": {
  4. "1": "some value of 1",
  5. "2": "some value of 2",
  6. "3": ""
  7. },
  8. "obejct_b": {
  9. "1": "",
  10. "2": "",
  11. "3": "some value of 3"
  12. },
  13. ..一些其他对象..
  14. }
  15. {
  16. "object_a": {
  17. "1": "some value of 1",
  18. "2": "",
  19. "3": "some value of 3"
  20. },
  21. "obejct_b": {
  22. "1": "",
  23. "2": "some value of 2",
  24. "3": ""
  25. },
  26. ..一些其他对象..
  27. }
  28. {
  29. "object_a": {
  30. "1": "",
  31. "2": "some value of 2",
  32. "3": ""
  33. },
  34. "obejct_b": {
  35. "3": "some value of 3",
  36. "1": "some value of 1",
  37. "2": ""
  38. },
  39. ..一些其他对象..
  40. }
  41. ]

我不知道还要添加什么。它看起来就像它现在这样。不幸的是,我无法更改输出格式。问题在于一些数据在"object_a"中,一些在"object_b"中。

期望的输出应该是这样的:

  1. [
  2. {
  3. "object": {
  4. "1": "some value of 1",
  5. "2": "some value of 2",
  6. "3": "some value of 3"
  7. }
  8. ..一些其他对象..
  9. }
  10. {
  11. "object": {
  12. "1": "some value of 1",
  13. "2": "some value of 2",
  14. "3": "some value of 3"
  15. }
  16. ..一些其他对象..
  17. }
  18. {
  19. "object": {
  20. "2": "some value of 2",
  21. "3": "some value of 3",
  22. "1": "some value of 1"
  23. }
  24. ..一些其他对象..
  25. }
  26. ]

我找不到一种使用jQuery来合并两个对象的方法。

英文:

I have this inconvenient output of data, like this:

  1. [
  2. {
  3. "object_a": {
  4. "1": "some value of 1",
  5. "2": "some value of 2",
  6. "3": ""
  7. },
  8. "obejct_b": {
  9. "1": "",
  10. "2": "",
  11. "3": "some value of 3"
  12. },
  13. ..some other objects..
  14. }
  15. {
  16. "object_a": {
  17. "1": "some value of 1",
  18. "2": "",
  19. "3": "some value of 3"
  20. },
  21. "obejct_b": {
  22. "1": "",
  23. "2": "some value of 2",
  24. "3": ""
  25. },
  26. ..some other objects..
  27. }
  28. {
  29. "object_a": {
  30. "1": "",
  31. "2": "some value of 2",
  32. "3": ""
  33. },
  34. "obejct_b": {
  35. "3": "some value of 3",
  36. "1": "some value of 1",
  37. "2": ""
  38. },
  39. ..some other objects..
  40. }
  41. ]

I don't know what more to add. It looks straightforward as it is.
Unfortunately, I cannot change the output format.
The problem is that some data is in "object_a" and some in "object_b"

The desired output would be like:

  1. [
  2. {
  3. "object": {
  4. "1": "some value of 1",
  5. "2": "some value of 2",
  6. "3": "some value of 3"
  7. }
  8. ..some other objects..
  9. }
  10. {
  11. "object": {
  12. "1": "some value of 1",
  13. "2": "some value of 2",
  14. "3": "some value of 3"
  15. },
  16. ..some other objects..
  17. }
  18. {
  19. "object": {
  20. "2": "some value of 2",
  21. "3": "some value of 3",
  22. "1": "some value of 1",
  23. },
  24. ..some other objects..
  25. }
  26. ]

I couldn't find a way to combine/merge two objects together, with jQuery.

Thanks.

答案1

得分: 0

以下是翻译好的代码部分,不包含其他内容:

  1. const output = [
  2. {
  3. "object_a": {
  4. "1": "some value of 1",
  5. "2": "some value of 2",
  6. "3": ""
  7. },
  8. "obejct_b": {
  9. "1": "",
  10. "2": "",
  11. "3": "some value of 3"
  12. },
  13. "some other object": {
  14. "foo": "bar"
  15. }
  16. },
  17. {
  18. "object_a": {
  19. "1": "some value of 1",
  20. "2": "",
  21. "3": "some value of 3"
  22. },
  23. "obejct_b": {
  24. "1": "",
  25. "2": "some value of 2",
  26. "3": ""
  27. }
  28. },
  29. {
  30. "object_a": {
  31. "1": "",
  32. "2": "some value of 2",
  33. "3": ""
  34. },
  35. "obejct_b": {
  36. "3": "some value of 3",
  37. "1": "some value of 1",
  38. "2": ""
  39. }
  40. }
  41. ];
  42. const merged = output.map(item => {
  43. // assumes object_a and obejct_b have the same keys
  44. const mergedAB = Object.keys(item.object_a).reduce((acc, key) => {
  45. // assuming typo in "obejct_b" is intentional
  46. acc[key] = item.object_a[key] || item.obejct_b[key];
  47. return acc;
  48. });
  49. const others = { ...item };
  50. delete others.object_a;
  51. delete others.obejct_b;
  52. return {
  53. object: mergedAB,
  54. ...others
  55. }
  56. });
  57. document.body.innerHTML = `<pre>${JSON.stringify(merged, null, 2)}</pre>`;

注意:代码中有一个拼写错误 "obejct_b" 应该是 "object_b",请根据需要进行更正。

英文:

Some assumptions must be made:

  • Every object in the top-level array will have the same two (and only these two) properties object_a and obejct_b [sic].
  • Every object_a and obejct_b will have the same set of properties.
  • For any key in an object_a that is an empty string, the value in the "merged" result should be that of the corresponding obejct_b.

With these assumptions, I would use the following code.
(Note that I have left as is the typo in obejct_b.)

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

  1. const output = [
  2. {
  3. &quot;object_a&quot;: {
  4. &quot;1&quot;: &quot;some value of 1&quot;,
  5. &quot;2&quot;: &quot;some value of 2&quot;,
  6. &quot;3&quot;: &quot;&quot;
  7. },
  8. &quot;obejct_b&quot;: {
  9. &quot;1&quot;: &quot;&quot;,
  10. &quot;2&quot;: &quot;&quot;,
  11. &quot;3&quot;: &quot;some value of 3&quot;
  12. },
  13. &quot;some other object&quot;: {
  14. &quot;foo&quot; : &quot;bar&quot;
  15. }
  16. },
  17. {
  18. &quot;object_a&quot;: {
  19. &quot;1&quot;: &quot;some value of 1&quot;,
  20. &quot;2&quot;: &quot;&quot;,
  21. &quot;3&quot;: &quot;some value of 3&quot;
  22. },
  23. &quot;obejct_b&quot;: {
  24. &quot;1&quot;: &quot;&quot;,
  25. &quot;2&quot;: &quot;some value of 2&quot;,
  26. &quot;3&quot;: &quot;&quot;
  27. }
  28. },
  29. {
  30. &quot;object_a&quot;: {
  31. &quot;1&quot;: &quot;&quot;,
  32. &quot;2&quot;: &quot;some value of 2&quot;,
  33. &quot;3&quot;: &quot;&quot;
  34. },
  35. &quot;obejct_b&quot;: {
  36. &quot;3&quot;: &quot;some value of 3&quot;,
  37. &quot;1&quot;: &quot;some value of 1&quot;,
  38. &quot;2&quot;: &quot;&quot;
  39. }
  40. }
  41. ];
  42. const merged = output.map(item =&gt; {
  43. // assumes object_a and obejct_b have the same keys
  44. const mergedAB = Object.keys(item.object_a).reduce((acc, key) =&gt; {
  45. // assuming typo in &quot;obejct_b&quot; is intentional
  46. acc[key] = item.object_a[key] || item.obejct_b[key];
  47. return acc;
  48. }, {});
  49. const others = { ...item };
  50. delete others.object_a;
  51. delete others.obejct_b;
  52. return {
  53. object: mergedAB,
  54. ...others
  55. }
  56. });
  57. document.body.innerHTML = `&lt;pre&gt;${JSON.stringify(merged, null, 2)}&lt;/pre&gt;`;

<!-- end snippet -->

huangapple
  • 本文由 发表于 2023年3月7日 05:02:46
  • 转载请务必保留本文链接:https://go.coder-hub.com/75655822.html
匿名

发表评论

匿名网友

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

确定