program tip

JSON 키 이름을 바꾸는 방법

radiobox 2020. 11. 27. 07:59
반응형

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사용했습니다 .replacereplace


일부 키의 모든 항목이름을 바꾸려면 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

반응형