Javascript Преобразовать строку в другой формат в Json

В Javascript у меня есть строка, которую нужно преобразовать в JSON. Я попытался преобразовать его с помощью регулярного выражения, как показано ниже, но не получил ожидаемого результата:

var testData = "{	name=xyz, \
	ip=[127.0.0.1], \
  machine_id=AVC_ASD_QWESF, \
	sys_Properties=[{ \
				Memory=4 GB, \
				system_type = { \
						OS=64 bit, \
						processor=64 bit \
						} \
				}] \
}";
var testJson = '';
var testArray = testData.split(',');
testArray.forEach(function(item) {
  var kvp = item.split('=');

  if (kvp.length > 1) {
    var key = kvp[0];
    var value = kvp[1];
    var value1 = '';

    if (kvp.length > 2) {
      value1 = kvp[2];

      value1 = value1.replace(/\b[a-zA-Z0-9]/gi, function(char) {
        return '"' + char;
      })
      value1 = value1.replace(/[a-zA-Z0-9]\b/gi, function(char) {
        return char + '"';
      })

      value = value + '": ' + value1;
    } else if (kvp.length = 2) {
      value = value.replace(/\b[a-zA-Z0-9]/gi, function(char) {
        return '"' + char;
      })
      value = value.replace(/[a-zA-Z0-9]\b/gi, function(char) {
        return char + '"';
      })
    }

    key = key.replace(/\b[a-z]/gi, function(char) {
      return '"' + char;
    })

    testJson = testJson + key + '": ' + value + ',';
  } else {
    testJson = testJson + item + ",";
  }
});

Есть ли возможность использовать такие символы, как "." быть включенным в границу слова.

Обновлено:

Ожидаемый JSON-формат:

{ 
  "name":"xyz", 
  "ip":["127.0.0.1"], 
  "machine_id":"AVC_ASD_QWESF", 
  "sys_Properties":[
      { "Memory":"4 GB", 
          "system_type":{ 
              "OS:64 bit", 
              "processor":"64 bit" 
          } 
       }
  ] 
} 

Вы уверены, что можете текстовые данные только так?

user3732793 14.08.2018 09:03

Да, именно так мы получаем данные

AKR 14.08.2018 09:14
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
75
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте это с помощью обратного вызова .replace:

const regex = /\s*(\w+)\s*(?==)|(=\[?)([^,{\[\]}\n]+)/g;
const str = `{	name=xyz, 
	ip=[127.0.0.1], 
  machine_id=AVC_ASD_QWESF, 
	sys_Properties=[{ 
				Memory=4 GB, 
				system_type = { 
						OS=64 bit, 
						processor=64 bit 
						} 
				}] 
}`;

const result = str.replace(regex, function(m, group1, group2, group3) {
    if (group1) return `"${group1}"`; //key
    else if (group2) return `${group2}"${group3}"`;   //  = "value"
    //else return m;
});
console.info(result.replace(/\=/g,  ':')
                  .replace(/(".+?")|\s+/g,  `$1`)); 
//replace remaining = with colon, and optional: replace remaining whitespace

Это было бы очень просто без пары ключ-значение ip. Я постарался сделать это простым и на последнем этапе заменил оставшийся = двоеточием. При желании мы также можем удалить оставшиеся пробелы или использовать JSON.stringify(JSON.parse(result)).

попробуй это. Я решил это, используя простое регулярное выражение.

var testData = '{   name=xyz, \
ip=[127.0.0.1], \
machine_id=AVC_ASD_QWESF, \
sys_Properties=[{ \
            Memory=4 GB, \
            system_type = { \
                    OS=64 bit, \
                    processor=64 bit \
                    } \
            }] \}';

var testJson = testData.replace(/(\s)([^\s]*)(\=)/g,'"$2"$3').replace(/(\=)/g, ":").replace(/\s+/g," ").replace(/(\:)([^\:\,\}]*)(\,|\})/g,'$1"$2"$3').replace(/(\")(\[)(.*)(\])(\")/g,"$2$1$3$5$4");

console.info(JSON.parse(testJson))

Другие вопросы по теме