глубокая копия JSON упрощен - PullRequest
0 голосов
/ 27 августа 2018

Попытка скопировать объект json, но когда в нем есть строка, мне нужно всего несколько пар ключ / значение из него и скопировать его в другой объект json (упрощенно);Данные в JSON выглядят примерно так

{ __createdAt: "2018-07-30T08:19:32.523Z",
  orderid: '12345',
  refund: null,
  order_verified: null,
  in_process: null,
  location_id: null,
  userInfo: '{"countrySelect":"DE","postalCode":"64289","ShippingCountry":"Germany","City":"Darmstadt","GooglePlace":"Darmstadt Germany","ShippingRegion":"Hesse","CustomerEmail":"myemail@gmail.com"}',
  payment: null,
  shippingInfo: 1437,
  taxInfo: 0,
  orderTotal: 5712,
  order_weight: 0,
  order_notes: '' }

Результат, который я пытаюсь достичь после копирования, выглядит примерно так.

{ __createdAt: "2018-07-30T08:19:32.523Z",
  orderid: '12345',
  refund: null,
  order_verified: null,
  in_process: null,
  location_id: null,
  countrySelect:"DE",
  ShippingCountry:"Germany",
  City:"Darmstadt",
  CustomerEmail:"myemail@gmail.com",
  payment: null,
  shippingInfo: 1437,
  taxInfo: 0,
  orderTotal: 5712,
  order_weight: 0,
  order_notes: '' }

Я не знаю, какие данные будут поступать из БД, но всякий раз, когда она содержит строку, я могу жестко закодировать ее, чтобы получить конкретные значения из строки в json.Пробовал глубокое копирование, но не смог сделать это правильно.Не то чтобы я не пытался сделать это, но не мог придумать способ сделать его более общим, а не жестко закодированным.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 27 августа 2018

Поскольку вы говорите, что глубина будет только на один уровень, вам не нужна, так сказать, "глубокая" копия.Звучит так, как будто вам нужно только проверить строки, чтобы увидеть, способны ли они JSON.parse, и если да, включить их пары ключ / значение в объект.

Если это так, просто попытайтесь пойматьсделает свое дело.Вы также можете добавить еще одну проверку после JSON.parse, чтобы убедиться, что результат анализа фактически является объектом, или отфильтровать определенные значения ключей и т. Д.

const src = {
  __createdAt: "2018-07-30T08:19:32.523Z", orderid: '12345', refund: null, order_verified: null, in_process: null, location_id: null,
  userInfo: '{"countrySelect":"DE","postalCode":"64289","ShippingCountry":"Germany","City":"Darmstadt","GooglePlace":"Darmstadt Germany","ShippingRegion":"Hesse","CustomerEmail":"myemail@gmail.com"}',
  payment: null, shippingInfo: 1437, taxInfo: 0, orderTotal: 5712, order_weight: 0, order_notes: ''
}

function copyExpand(target, source) {
  for (let k in source) {
    if (typeof source[k] === 'string') {
      try {
        let json = JSON.parse(source[k]);
        copyExpand(target, json);
      } catch (e) {
        target[k] = source[k];
      }
    } else target[k] = source[k];
  }
}
const tgt = {};
copyExpand(tgt, src);
console.log(tgt);
...