#javascript #json #reactjs
#javascript #json #reactjs
Вопрос:
Я использую axios, в ответ я получаю файл json. Насколько я знаю, axios по умолчанию преобразует файл json в объект. Вот как это выглядит:
let newMessage{
channel:"WHATSAPP",
messages:"[{"message_type":"text","message_content":"call me back"}]",
position_id:0,
}
Но «сообщения» — это строка, она должна быть массивом. Итак, я json.разбираю сообщения, получаю «message_content» и присваиваю значение. Но значение не меняется. В чем может быть проблема?
JSON.parse(newMessage.messages)[0].message_content = "xoxo"
Комментарии:
1. Вы должны изменить JSON, чтобы он сохранялся в виде массива, а не строки, если у вас есть над ним контроль.
Ответ №1:
Значение исходной строки не изменяется, потому что ваш код изменяет объект, который был создан функцией JSON.parse(), а не исходную строку. Вам придется снова преобразовать это значение в строку, а затем перезаписать свойство «сообщения» объекта новой строкой:
let newMessage = {
channel: "WHATSAPP",
messages: '[{"message_type ":"text ","message_content ":"call me back "}]',
position_id: 0,
};
var messageArr = JSON.parse(newMessage.messages);
messageArr[0].message_content = "xoxo";
newMessage.messages = JSON.stringify(messageArr);
console.log(newMessage);
PS Код в вашем вопросе не компилировался, поэтому я взял на себя смелость изменить его на то, что, как я предполагал, вы намеревались.
Ответ №2:
let newMessage = {
channel: "WHATSAPP",
messages: '[{"message_type ":"text ","message_content ":"call me back "}]',
position_id: 0,
};
let newmessageArr = JSON.parse(newMessage.messages);
newmessageArr[0].message_content = "xoxo";
newMessage.messages = JSON.stringify(newmessageArr);
console.log(newMessage);
Комментарии:
1. Пожалуйста, добавьте сюда описание того, что вы изменили в коде или где была ошибка.