我有这样的json对象:
var client = {
"id": 1,
"name": "John Doe",
"name2": "Jane Doe",
"email": "John@test.com",
"phone": "+1-306-5555555",
"phoneType": "Home",
"phone2": "+1-306-5556666",
"phone2Type": "Business",
"gender": "Male",
"address": "1000 Center AVE",
"postCode": "S7J 1P3",
"city": "Saskatoon",
"province": "SK",
"country": "CA",
"dob": "1990-12-11T02:00:00.000Z",
"maritalStatus": "Single",
"occupation": "Software Developer",
"createdAt": "2015-12-07T08:14:21.000Z",
"updatedAt": "2016-01-19T13:35:10.000Z"
};
我想将其转换为XML,这不是问题,我知道像x2js这样的大型库可以为我做到这一点。
我的问题是xml文件,需要遵循这样的标准:
<GeneralPartyInfo>
<NameInfo>
<PersonName>
<Surname>Doe </Surname>
<GivenName>John</GivenName>
</PersonName>
<SupplementaryNameInfo>
<SupplementaryName>Jane Doe</SupplementaryName>
</SupplementaryNameInfo>
</NameInfo>
<Addr>
<DetailAddr>
<StreetName>Centre</StreetName>
<StreetNumber>1000</StreetNumber>
<csio:StreetTypeCd>AVE</csio:StreetTypeCd>
</DetailAddr>
<City>Saskatoon</City>
<StateProvCd>SK</StateProvCd>
<PostalCode>S7J 1P3</PostalCode>
<CountryCd>CA</CountryCd>
</Addr>
<Communications>
<PhoneInfo>
<PhoneTypeCd>Phone</PhoneTypeCd>
<CommunicationUseCd>Home</CommunicationUseCd>
<PhoneNumber>+1-306-5555555</PhoneNumber>
</PhoneInfo>
<PhoneInfo>
<PhoneTypeCd>Phone</PhoneTypeCd>
<CommunicationUseCd>Business</CommunicationUseCd>
<PhoneNumber>+1-306-5556666</PhoneNumber>
</PhoneInfo>
</Communications>
你可以嵌套xml而我的json不是,不提名名需要拼接到firstName和lastName,并且在PersonName里面是NameInfo的子节点,而GeneralPartyInfo是根父节点(地址相同)。 / p>
我有两个问题,第一个是缺少标签,例如firstname是在PersonName里面,在NameInfo里面,在GeneralPartyInfo里面,我不能这样做
var firstName = client.name.split(' ').slice(0, -1).join(' ');
var lastName = client.name.split(' ').slice(-1).join(' ');
delete client.name;
client.PersonName.push({
GiveName: firstName,
Surname: lastName,
});
因为JSON是一个对象而不是数组,所以我需要将JSON转换为数组(这里不是其他专业人士推荐的),或者我可以将每个(名称,地址,通信)保存到其中单独的json对象然后将所有这些连接在一起abdthe我在SO中找到的唯一方法来添加父json对象就像这样
var obj = {fistName: client.name.split(' ').slice(0, -1).join(' '), lastName: client.name.split(' ').slice(-1).join(' ');};
var obj2 = { "PersonName" : obj };
var obj3 = { "NameInfo" : obj2 };
我的第二个问题是找到替换密钥的方法,例如我想将邮政编码替换为PostalCode或phoneType替换为CommunicationUseCd
或者就这样做
var xml = "<GeneralPartyInfo><NameInfo><PersonName>
<Surname>" + client.name.split(' ').slice(0, -1).join(' '); + "</Surname>
<GivenName>"+client.name.split(' ').slice(-1).join(' ')+"</GivenName>"
但是这个解决方案很乏味,效率不高,看起来也不漂亮,而且我对代码的稳定性和清洁性有了更多的了解。
例如,如何操作json对象以将父级添加到所选元素,然后我可以通过具有要替换的键的列表替换键,例如。
var translationObj = {
"firstName": "GivenName",
"lastName": "PersonName",
}
PS:我安装了lodash / underscore,因此使用下划线的解决方案会很棒。