programing

JSON 키 이름 변경 방법

cafebook 2023. 3. 14. 21:54
반응형

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 중 하나를 사용하여 어떻게 해야 합니까?

감사해요.

  1. JSON의 해석
const arr = JSON.parse(json);
  1. JSON 내의 각 오브젝트에 대해 키의 이름을 변경합니다.
obj.id = obj._id;
delete obj._id;
  1. 결과의 문자열화

모두 함께:

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

반응형