json字符串替换-循环对象还是字符串替换?

oymdgrw7  于 2021-09-23  发布在  Java
关注(0)|答案(2)|浏览(516)

我有一个需要替换的json字符串。

{
    "hall1": {
        "contents": {
            "b_pen": "2",
            "r_pen": "4",
            "n_books": "5",
            "f_books": "11"
        },
        "status": "closed"
    },
    "hall2": {
        "contents": {
            "r_pen": "4",
            "b_pen": "1",
            "f_books": "5",
            "n_books": "21"
        },
        "status": "open"
    }
}

请参见上面的json示例。我得把钥匙换了 b_pen , r_pen , f_booksn_booksblue_pen , red_pen , fictional_booksnovel_books 分别地一个简单的字符串替换可以解决这个问题。但这只是一个伪json。实际的json具有更长的长度和深度。我关心的是性能问题。
为了做到这一点,我有两个选择。
全局字符串替换json字符串
循环json对象并替换键
我不能从中选择一个,因为我很困惑。

jv4diomz

jv4diomz1#

试试这个。逻辑是维护一个键Map。然后用现有值指定替换键,然后删除旧键。

const data={hall1:{contents:{b_pen:"2",r_pen:"4",n_books:"5",f_books:"11"},status:"closed"},hall2:{contents:{r_pen:"4",b_pen:"1",f_books:"5",n_books:"21"},status:"open"}};

const keymap = {b_pen: 'blue_pen', r_pen: 'red_pen', f_books: 'functional_books', n_books: 'novel_books'};

const res = Object.fromEntries(
  Object.entries(data).map(([key, value]) => {
    if (value?.contents) {
        for (k in value.contents) {
          const x = keymap[k];
          delete Object.assign(value.contents, {[x]: value.contents[k]})[k];
        }
    }
    return [key, value];
  })
);

console.log(res);
.as-console-wrapper {min-height: 100%!important; top: 0}
x759pob2

x759pob22#

你有多种选择可以做到这一点。您可以使用regex或循环并替换它,但最简单的方法是使用split和join
这是一个以前已经回答过的类似问题的例子

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));

相关问题