将方括号添加到JSON对象

时间:2019-02-22 09:14:47

标签: javascript json

我从服务器获取此JSON。但是,要使用此JSON,我需要在MH对象中添加方括号。我怎样才能做到这一点。我尝试过.map,但没有为我工作。有没有更好的解决方案。还是.map在那里使用。如果可以,您可以向我提示如何操作。还是有更好的解决方案?

{
    "PAD": [
        {
            "PADPS286": "Dampf",
            "PADPS124": "Hans",
            "PADPS60": "2018-05-01",
            "PADPS143": "1",
            "MH": {
                "MHVSS1": [
                    {}
                ],
                "MHDIRW214": 2017,
                "MHDIRW215": 2018,
                "birthdate": "2018-05-01",
                "MHDIRW129 ": "0"
            }
        },
        {
            "PADPS286": "Snow",
            "PADPS124": "Jon",
            "PADPS60": "2077-05-01",
            "PADPS143": "",
            "MH": {
                "MHVSS1": [
                    {}
                ],
                "MHDIRW214": 4,
                "MHDIRW215": 4,
                "birthdate": "2077-05-01",
                "MHDIRW129 ": "0"
            }
        }
    ]
}

我需要带有MH对象的方形括号的JSON

{
    "PAD": [
        {
            "PADPS286": "Dampf",
            "PADPS124": "Hans",
            "PADPS60": "2018-05-01",
            "PADPS143": "1",
            "MH": [{
                "MHVSS1": [
                    {}
                ],
                "MHDIRW214": 2017,
                "MHDIRW215": 2018,
                "birthdate": "2018-05-01",
                "MHDIRW129 ": "0"
            }]
        },
        {
            "PADPS286": "Snow",
            "PADPS124": "Jon",
            "PADPS60": "2077-05-01",
            "PADPS143": "",
            "MH": [{
                "MHVSS1": [
                    {}
                ],
                "MHDIRW214": 4,
                "MHDIRW215": 4,
                "birthdate": "2077-05-01",
                "MHDIRW129 ": "0"
            }
        ]}
    ]
}

5 个答案:

答案 0 :(得分:1)

这并不是真正的“添加方括号”,而是将“ MH”对象包装在数组中。

无论如何,这是一条.map语句将为您完成(无需更改原始数据,因此Object.assign的恶作剧):

data.PAD = data.PAD.map((padObj) => Object.assign({}, padObj, {MH: [padObj.MH]}));

基本上,对于PAD数组中的每个条目,我们在那里合并三个对象:

  • 新鲜的空对象{}
  • 原始padObj条目
  • 一个小对象,仅将原始padObj中的MH元素包装在数组中。

输出符合预期:

{
  "PAD": [
    {
      "PADPS286": "Dampf",
      "PADPS124": "Hans",
      "PADPS60": "2018-05-01",
      "PADPS143": "1",
      "MH": [
        {
          "MHVSS1": [{}],
          "MHDIRW214": 2017,
          "MHDIRW215": 2018,
          "birthdate": "2018-05-01",
          "MHDIRW129 ": "0"
        }
      ]
    },
    {
      "PADPS286": "Snow",
      "PADPS124": "Jon",
      "PADPS60": "2077-05-01",
      "PADPS143": "",
      "MH": [
        {
          "MHVSS1": [{}],
          "MHDIRW214": 4,
          "MHDIRW215": 4,
          "birthdate": "2077-05-01",
          "MHDIRW129 ": "0"
        }
      ]
    }
  ]
}

答案 1 :(得分:1)

只需在data.PAD上使用forEach,即可将MH属性重新分配给数组。由于数组和对象是通过JavaScript中的引用传递的,因此这将修改您的数据:

data.PAD.forEach(pad => pad.MH = [pad.MH]);

const data = {
    "PAD": [
        {
            "PADPS286": "Dampf",
            "PADPS124": "Hans",
            "PADPS60": "2018-05-01",
            "PADPS143": "1",
            "MH": {
                "MHVSS1": [
                    {}
                ],
                "MHDIRW214": 2017,
                "MHDIRW215": 2018,
                "birthdate": "2018-05-01",
                "MHDIRW129 ": "0"
            }
        },
        {
            "PADPS286": "Snow",
            "PADPS124": "Jon",
            "PADPS60": "2077-05-01",
            "PADPS143": "",
            "MH": {
                "MHVSS1": [
                    {}
                ],
                "MHDIRW214": 4,
                "MHDIRW215": 4,
                "birthdate": "2077-05-01",
                "MHDIRW129 ": "0"
            }
        }
    ]
};

data.PAD.forEach(pad => pad.MH = [pad.MH]);
console.log(data)

答案 2 :(得分:0)

尝试使用forEach循环。在MH内的每个PAD array属性上,将其设置为array,然后将其分配回对象

var a = {
  "PAD": [{
      "PADPS286": "Dampf",
      "PADPS124": "Hans",
      "PADPS60": "2018-05-01",
      "PADPS143": "1",
      "MH": {
        "MHVSS1": [{}],
        "MHDIRW214": 2017,
        "MHDIRW215": 2018,
        "birthdate": "2018-05-01",
        "MHDIRW129 ": "0"
      }
    },
    {
      "PADPS286": "Snow",
      "PADPS124": "Jon",
      "PADPS60": "2077-05-01",
      "PADPS143": "",
      "MH": {
        "MHVSS1": [{}],
        "MHDIRW214": 4,
        "MHDIRW215": 4,
        "birthdate": "2077-05-01",
        "MHDIRW129 ": "0"
      }
    }
  ]
};
a.PAD.forEach((e, i) => {
  a.PAD[i].MH = [e.MH]
})
console.log(a)

答案 3 :(得分:0)

var obj = {
    "PAD": [
        {
            "PADPS286": "Dampf",
            "PADPS124": "Hans",
            "PADPS60": "2018-05-01",
            "PADPS143": "1",
            "MH": {
                "MHVSS1": [
                    {}
                ],
                "MHDIRW214": 2017,
                "MHDIRW215": 2018,
                "birthdate": "2018-05-01",
                "MHDIRW129 ": "0"
            }
        },
        {
            "PADPS286": "Snow",
            "PADPS124": "Jon",
            "PADPS60": "2077-05-01",
            "PADPS143": "",
            "MH": {
                "MHVSS1": [
                    {}
                ],
                "MHDIRW214": 4,
                "MHDIRW215": 4,
                "birthdate": "2077-05-01",
                "MHDIRW129 ": "0"
            }
        }
    ]
};
var objMod = {};
objMod.PAD = obj.PAD.map(o => { 
  var mo = JSON.parse(JSON.stringify(o));
  mo["MH"] = Array(o["MH"]); 
  return mo;
});

console.log(objMod);

答案 4 :(得分:0)

如果你想添加一个字符串数组(只在字符串周围添加括号),那么上面的方法可能会起作用,但是如果你试图使属性成为一个数组,你需要做的是将 JSON 属性转换为一个列表在课堂上按照:

public class AddressElements 
 implements Serializable
 {
  @JsonProperty("Street")
  private List<Street> Street = new ArrayList<Street>();
  @JsonProperty("HouseNumber")
  private List<HouseNumber> HouseNumber = new ArrayList <HouseNumber>();
  @JsonProperty("Locality")
  private List<Locality> Locality = new ArrayList<Locality>();
  @JsonProperty("AdministrativeDivision")
  private List<AdministrativeDivision> AdministrativeDivision = new 
  ArrayList<AdministrativeDivision>();
  @JsonProperty("PostalCode")
  private List<PostalCode> PostalCode = new ArrayList<PostalCode>();
  @JsonProperty("Country")
  private String Country;

  <getters and setters>
}

结果输出(初始化后)如下所示:

"body": {
"Login": "ssssss",
"Password": "eeeeee",
"UseTransactionPool": "test",
"JobToken": "",
"Request": {
"parameters": {
    "Mode": "Certified"
  },
"IO": {
    "Inputs": {
      "AddressElements": {
        "Street": [
          {
            "Value": "Wilder Rd."
          }
        ],
        "HouseNumber": [
          {
            "Value": "123"
          }
        ],
        "Locality": [
          {
            "Value": "Newton"
          }
        ],
        "AdministrativeDivision": [
          {
            "Value": "NY"
          }
        ],
        "PostalCode": [
          {
            "Value": "12345"
          }
        ],
        "Country": "USA"
      }
    }
  }
}

} }