JSON 키 이름을 바꾸는 방법
다음 내용이 포함 된 JSON 개체가 있습니다.
[
{
"_id":"5078c3a803ff4197dc81fbfb",
"email":"user1@gmail.com",
"image":"some_image_url",
"name":"Name 1"
},
{
"_id":"5078c3a803ff4197dc81fbfc",
"email":"user2@gmail.com",
"image":"some_image_url",
"name":"Name 2"
}
]
"_id"키를 "id"로 변경하여
[
{
"id":"5078c3a803ff4197dc81fbfb",
"email":"user1@gmail.com",
"image":"some_image_url",
"name":"Name 1"
},
{
"id":"5078c3a803ff4197dc81fbfc",
"email":"user2@gmail.com",
"image":"some_image_url",
"name":"Name 2"
}
]
Javascript, jQuery 또는 Ruby, Rails로 어떻게 할 수 있습니까?
감사.
var json = '[{"_id":"5078c3a803ff4197dc81fbfb","email":"user1@gmail.com","image":"some_image_url","name":"Name 1"},{"_id":"5078c3a803ff4197dc81fbfc","email":"user2@gmail.com","image":"some_image_url","name":"Name 2"}]';
var obj = JSON.parse(json)[0];
obj.id = obj._id;
delete obj._id;
json = JSON.stringify([obj]);
이것은 json을 다음과 같이 변경합니다.
[{"email":"user1@gmail.com","image":"some_image_url","name":"Name 1","id":"5078c3a803ff4197dc81fbfb"}]
JSON의 이름 / 값 쌍에는 순서가 의미가 없으므로 원하는 결과와 동일합니다.
이 경우 문자열 바꾸기를 사용하는 것이 가장 쉽습니다. _id가 객체의 속성 이름이되고 속성 이름을 변경하는 것은 간단한 작업이 아니기 때문에 JSON 직렬화는 제대로 작동하지 않습니다 (적어도 대부분의 언어에서는 그렇지 않으며 자바 스크립트에서는 그렇게 나쁘지 않습니다). 대신 그냥하십시오.
jsonString = jsonString.replace("\"_id\":", "\"id\":");
evanmcdonnal 에서 언급했듯이 가장 쉬운 해결책은 이것을 JSON 대신 문자열로 처리하는 것입니다.
var json = [{"_id":"5078c3a803ff4197dc81fbfb","email":"user1@gmail.com","image":"some_image_url","name":"Name 1"},{"_id":"5078c3a803ff4197dc81fbfc","email":"user2@gmail.com","image":"some_image_url","name":"Name 2"}];
json = JSON.parse(JSON.stringify(json).split('"_id":').join('"id":'));
document.write(JSON.stringify(json));
그러면 주어진 JSON 데이터를 문자열로 변환하고 "_id"를 "id"로 바꾼 다음 필요한 JSON 형식으로 다시 변환합니다. 그러나 나는 문자열의 첫 번째 발생만을 대체 하기 때문에 대신 split
및을 join
사용했습니다 .replace
replace
일부 키의 모든 항목 의 이름을 바꾸려면 g 옵션과 함께 정규식을 사용할 수 있습니다. 예를 들면 :
var json = [{"_id":"1","email":"user1@gmail.com","image":"some_image_url","name":"Name 1"},{"_id":"2","email":"user2@gmail.com","image":"some_image_url","name":"Name 2"}];
str = JSON.stringify(json);
이제 str에 문자열 형식의 json이 있습니다.
g 옵션 과 함께 regex를 사용하여 "_id"의 모든 항목을 "id"로 바꿉니다 .
str = str.replace(/\"_id\":/g, "\"id\":");
json 형식으로 돌아갑니다.
json = JSON.parse(str);
이제 원하는 키 이름을 가진 json이 있습니다.
이 시도:
let jsonArr = [
{
"_id":"5078c3a803ff4197dc81fbfb",
"email":"user1@gmail.com",
"image":"some_image_url",
"name":"Name 1"
},
{
"_id":"5078c3a803ff4197dc81fbfc",
"email":"user2@gmail.com",
"image":"some_image_url",
"name":"Name 2"
}
]
let idModified = jsonArr.map(
obj => {
return {
"id" : obj._id,
"email":obj.email,
"image":obj.image,
"name":obj.name
}
}
);
console.log(idModified);
typeScript를 사용하여 가능합니다.
function renameJson(json,oldkey,newkey) {
return Object.keys(json).reduce((s,item) =>
item == oldkey ? ({...s,[newkey]:json[oldkey]}) : ({...s,[item]:json[item]}),{})
}
예 : https://codepen.io/lelogualda/pen/BeNwWJ
이의가 다음과 같이 보이는 경우 :
obj = {
"_id":"5078c3a803ff4197dc81fbfb",
"email":"user1@gmail.com",
"image":"some_image_url",
"name":"Name 1"
}
아마도 JavaScript에서 가장 간단한 방법은 다음과 같습니다.
obj.id = obj._id
del object['_id']
As a result, you will get:
obj = {
"id":"5078c3a803ff4197dc81fbfb",
"email":"user1@gmail.com",
"image":"some_image_url",
"name":"Name 1"
}
If you want to do it dynamically, for example, you have an array which you want to apply as a key to JSON object:
your Array will be like :
var keys = ["id", "name","Address","Phone"] // The array size should be same as JSON Object keys size
Now you have a JSON Array like:
var jArray = [
{
"_id": 1,
"_name": "Asna",
"Address": "NY",
"Phone": 123
},
{
"_id": 2,
"_name": "Euphoria",
"Address": "Monaco",
"Phone": 124
},
{
"_id": 3,
"_name": "Ahmed",
"Address": "Mumbai",
"Phone": 125
}
]
$.each(jArray ,function(pos,obj){
var counter = 0;
$.each(obj,function(key,value){
jArray [pos][keys[counter]] = value;
delete jArray [pos][key];
counter++;
})
})
Your resultant JSON Array will be like :
[
{
"id": 1,
"name": "Asna",
"Address": "NY",
"Phone": 123
},
{
"id": 2,
"name": "Euphoria",
"Address": "Monaco",
"Phone": 124
},
{
"id": 3,
"name": "Ahmed",
"Address": "Mumbai",
"Phone": 125
}
]
By using map function you can do that. Please refer below code.
var userDetails = [{
"_id":"5078c3a803ff4197dc81fbfb",
"email":"user1@gmail.com",
"image":"some_image_url",
"name":"Name 1"
},{
"_id":"5078c3a803ff4197dc81fbfc",
"email":"user2@gmail.com",
"image":"some_image_url",
"name":"Name 2"
}];
var formattedUserDetails = userDetails.map(({ _id:id, email, image, name }) => ({
id,
email,
image,
name
}));
console.log(formattedUserDetails);
참고URL : https://stackoverflow.com/questions/13391579/how-to-rename-json-key
'program tip' 카테고리의 다른 글
WebClient 요청에 대한 User-Agent 헤더 설정 (0) | 2020.11.27 |
---|---|
파이썬에서 globals ()에 대한 이유? (0) | 2020.11.27 |
python numpy.savetxt를 사용하여 ASCII 파일에 문자열과 부동 숫자를 쓰는 방법은 무엇입니까? (0) | 2020.11.27 |
python numpy.savetxt를 사용하여 ASCII 파일에 문자열과 부동 숫자를 쓰는 방법은 무엇입니까? (0) | 2020.11.27 |
Full, Para 및 Hardware Assisted Virtualization의 차이점은 무엇입니까? (0) | 2020.11.27 |