Попытка преобразовать строковую переменную ответа json в объект, но не удалось - PullRequest
0 голосов
/ 10 января 2019

возврат ответа json (из функции ajax):

{ "shoe_products":"{name: 'nike pegasus 35',data: [56.00,43.00,32.00], stack: 'Nike'},{name: 'adidas ultraboost',data: [32.00,34.00,35.00,0,55.0], stack: 'Adidas'}" }

Это строка после отладки с использованием alert(typeof data.myjson). Проблема в том, что я не могу преобразовать его в объект.

var myobj = JSON.parse(data.shoe_products); //this will return Unexpected token n in JSON at position 1

Но если я сделаю код ниже, он вернется как объект.

var test = [{"shoe_products":"{name: 'nike pegasus 35',data: [56.00,43.00,32.00], stack: 'Nike'},{name: 'adidas ultraboost',data: [32.00,34.00,35.00,0,55.0], stack: 'Adidas'}"}];

Функция Ajax

 $.ajax({
            type: "POST",
            url: urlLinkHere,
            data: { "year" : year },
            success: function(data) {

                var myobj = JSON.parse(data.shoe_products);

            }
        });

    });

1 Ответ

0 голосов
/ 10 января 2019

Возможно, вы могли бы рассмотреть следующее:

  1. Окружите любой «ключ» в строке json двойными кавычками следующим образом: .replace(/([a-z]+)\w*c/gi, "\"$1\":"). Идея здесь состоит в том, чтобы сопоставить любую строку, за которой следует : (которую мы считаем ключом), и заключить эти совпадения в двойные кавычки.
  2. Затем окружите строку из шага 1 с помощью [ и ], убедившись, что данные в shoe_products на самом деле являются массивом (в строке shoe_products есть несколько объектов, разделенных ,)

Итак, что-то в этом роде:

// Your input data
var test = [{"shoe_products":"{name: 'nike pegasus 35',data: [56.00,43.00,32.00], stack: 'Nike'},{name: 'adidas ultraboost',data: [32.00,34.00,35.00,0,55.0], stack: 'Adidas'}"}];

var shoe_products = test[0].shoe_products;

// The shoe_products data is organised as a list of data, so surround with [] brackets
// to achieve valid JSON array
var validJsonString = '[' + shoe_products
// Surround all json keys with double quotes. These are matched by any string followed by
// a colon
.replace(/([a-z]+)\w*:/gi, "\"$1\":") 
// Replace any other single quote with double quotes
.replace(/'/gi,'"') + ']'


var jsonObject = JSON.parse(validJsonString);

console.log(jsonObject)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...