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 중 하나를 사용하여 어떻게 해야 합니까?
감사해요.
- JSON의 해석
const arr = JSON.parse(json);
- JSON 내의 각 오브젝트에 대해 키의 이름을 변경합니다.
obj.id = obj._id;
delete obj._id;
- 결과의 문자열화
모두 함께:
function renameKey ( obj, oldKey, newKey ) {
obj[newKey] = obj[oldKey];
delete obj[oldKey];
}
const 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"
}
]
`;
const arr = JSON.parse(json);
arr.forEach( obj => renameKey( obj, '_id', 'id' ) );
const updatedJson = JSON.stringify( arr );
console.log( updatedJson );
이 경우 문자열 치환을 사용하는 것이 가장 쉽습니다._id가 개체의 속성 이름이 되고 속성 이름을 변경하는 것은 간단한 작업이 아니기 때문에 JSON을 직렬화하는 것은 잘 되지 않습니다(최소한 대부분의 언어에서는 javascript에서는 나쁘지 않습니다).대신 그렇게 하세요.
jsonString = jsonString.replace("\"_id\":", "\"id\":");
evanmcdonal에서 언급했듯이 가장 쉬운 해결책은 이것을 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
는 문자열의 첫 번째 항목만 바꿉니다.
JSON.parse
에는 2개의 파라미터가 있습니다.두 번째 파라미터인 reviver는 원하는 출력 포맷을 포맷할 수 있는 변환 함수입니다.여기 ECMA 사양을 참조하십시오.
리바이버 기능:
- 정의되지 않은 상태로 반환되면 원래 속성이 삭제됩니다.
this
는 이 함수로 처리되는 속성 및 문자열로서의 속성 이름, 이 함수의 인수로서의 속성 값을 포함하는 객체입니다.
const 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"}]';
const obj = JSON.parse(json, function(k, v) {
if (k === "_id") {
this.id = v;
return; // if return undefined, orignal property will be removed
}
return v;
});
const res = JSON.stringify(obj);
console.log(res)
출력:
[{"email":"user1@gmail.com","image":"some_image_url","name":"Name 1","id":"5078c3a803ff4197dc81fbfb"},{"email":"user2@gmail.com","image":"some_image_url","name":"Name 2","id":"5078c3a803ff4197dc81fbfc"}]
이것을 시험해 보세요.
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);
특정 키의 모든 이름을 변경하려면 g 옵션과 함께 regex를 사용할 수 있습니다.예를 들어 다음과 같습니다.
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이 있습니다.
regex를 사용하여 "_id"에서 "id"로 모든 항목을 g 옵션으로 바꿉니다.
str = str.replace(/\"_id\":/g, "\"id\":");
json 형식으로 돌아갑니다.
json = JSON.parse(str);
이제 지명수배된 키네임을 가진 우리 아들을 잡았습니다.
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
지도 기능을 사용하면 그렇게 할 수 있습니다.아래 코드를 참조하십시오.
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);
오브젝트가 다음과 같은 경우:
obj = {
"_id":"5078c3a803ff4197dc81fbfb",
"email":"user1@gmail.com",
"image":"some_image_url",
"name":"Name 1"
}
JavaScript에서 가장 간단한 방법은 다음과 같습니다.
obj.id = obj._id
del object['_id']
그 결과 다음과 같은 이점을 얻을 수 있습니다.
obj = {
"id":"5078c3a803ff4197dc81fbfb",
"email":"user1@gmail.com",
"image":"some_image_url",
"name":"Name 1"
}
이것을 동적으로 실시할 필요가 있는 경우는, 다음과 같습니다.
const keys = Object.keys(jsonObject);
keys.forEach((key) => {
// CREATE A NEW KEY HERE
var newKey = key.replace(' ', '_');
jsonObject[newKey] = jsonObject[key];
delete jsonObject[key];
});
jsonObject
이제 새 키를 갖게 됩니다.
중요:
에 의해 키가 변경되지 않은 경우replace
이 기능을 사용하면 어레이에서 삭제됩니다.조금 넣으셔도 됩니다.if
진술서를 작성했습니다.
JSON 개체의 키를 바꾸려면 다음 논리를 사용하십시오.
const student= {
"key": "b9ed-9c1a04247482",
"name": "Devaraju",
"DOB" : "01/02/2000",
"score" : "A+"
}
let {key, ...new_student} = {...student}
new_student.id= key
console.log(new_student)
더 깊은 수준에서 중첩된 json의 newKey를 사용하여 oldKey를 업데이트하려면 다음과 같이 하십시오.
function transformKeys(object, newKey, oldKey) {
if(Array.isArray(object)){
object.map((item) => {
transformKeys(item, newKey, oldKey)
})
}
if(typeof object === 'object' && !Array.isArray(object)){
Object.keys(object).forEach(key => {
if (typeof object[key] === 'object') {
transformKeys(object[key], newKey, oldKey)
}
if (key === oldKey) {
object[newKey] = object[key]
delete object[key]
}
})
}
}
내 대답은 이렇게 네스트된 json에게 유효합니다.
[
{
"id": 1,
"name": "1111111111",
"children": [
{
"id": 2,
"name": "2222",
}
]
},
{
"id": 3,
"name": "1",
},
]
선택한 컴포넌트에 대해 키 'id'를 'value'로, 'name'을 'label'로 바꾸고 싶습니다.
기능:
function renameKeyInJson(json, keys) {
let dataStr = JSON.stringify(json);
keys.forEach(e => {
dataStr = dataStr.replace(new RegExp(`"${e.oldKey}":`, "g"), `"${e.newKey}":`);
});
return JSON.parse(dataStr);
}
사용방법:
const response = await getAll(bookId);
return renameKeyInJson(response.data, [
{oldKey: 'name', newKey: 'label'},
{oldKey: 'id', newKey: 'value'},
]);
예를 들어 동적으로 수행하는 경우 JSON 개체에 키로 적용하는 배열이 있습니다.
어레이는 다음과 같습니다.
var keys = ["id", "name","Address","Phone"] // The array size should be same as JSON Object keys size
다음과 같은 JSON 어레이가 탑재되었습니다.
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++;
})
})
결과 JSON 어레이는 다음과 같습니다.
[
{
"id": 1,
"name": "Asna",
"Address": "NY",
"Phone": 123
},
{
"id": 2,
"name": "Euphoria",
"Address": "Monaco",
"Phone": 124
},
{
"id": 3,
"name": "Ahmed",
"Address": "Mumbai",
"Phone": 125
}
]
오브젝트내의 키의 이름을 변경하는 보다 유연한 솔루션을 제공하려면 ,
사용방법:
jsondata = renameKey(jsondata,"_id","id");
기능:
function renameKey(data,oldname,newname)
{
for (let i = 0; i < data.length; i++) {
let element = data[i];
element[newname] = element[oldname];
delete element[oldname];
}
return data;
}
(저와 같이) 같은 순서를 유지하기 위해 키가 필요한 경우, 여기 엉망인 솔루션이 있습니다.최적화가 제대로 되지 않은 것은 확실합니다.
function renameKey(data,oldname,newname)
{
for (let i = 0; i < data.length; i++)
{
let element = data[i];
let info = Object.keys(data[i]);
for (let ii = 0; ii < info.length; ii++)
{
let key = info[ii];
if (key !== oldname)
{
let skey = key + "~"; //make temporary key
element[skey] = element[key]; //copy values to temp key
delete element[key]; //delete old key
element[key] = element[skey]; //copy key back to orginal name, preserving its position.
delete element[skey]; //delete temp key
}
else
{
element[newname] = element[key];
delete element[key];
}
}
}
return data;
}
언급URL : https://stackoverflow.com/questions/13391579/how-to-rename-json-key
'programing' 카테고리의 다른 글
JSON 문자열에서 반환된 Objective-C의 null 값 확인 (0) | 2023.03.14 |
---|---|
여러 HOC 래퍼를 사용하여 React 컴포넌트를 내보내시겠습니까? (0) | 2023.03.14 |
오브젝트가 Python에서 JSON serializable인지 쉽게 확인할 수 있는 방법이 있나요? (0) | 2023.03.14 |
각도 구성 요소 외부의 클릭 감지 (0) | 2023.03.14 |
jss 색상의 불투명도를 변경하는 방법 (0) | 2023.03.14 |