Мой объект Json выглядит так:
[
{
"keys": {
"_1": ".",
"_2": ".",
"_3": "."
},
"credits": -200,
"_id": "5c1e3e7531dccf0017cf70b9",
"firstName": "Martin",
"lastName": "Seubert",
"username": "admin",
"createdDate": "2018-12-22T13:39:01.244Z",
"__v": 0,
"id": "5c1e3e7531dccf0017cf70b9"
}
]
Я хочу, чтобы следующая функция установила для ключей значение, которое я беру из другого API:
updateKeys() {
let user = JSON.parse(localStorage.getItem('user'));
var requestUrl = 'https://mighty-atoll-75521.herokuapp.com/users/';
var id = user._id
fetch(requestUrl + id, {
method: 'put',
headers: {
...authHeader(),
'Accept': 'application/json, text/plain, */*',
'Content-Type': 'application/json'
},
body: JSON.stringify({keys._1: this.props.code})
})
}
Но я получаю это сообщение об ошибке в браузере:
Есть ли у вас какие-нибудь предложения для меня?
С наилучшими пожеланиями
Мартин
Обновлено:
Здесь вы можете найти полный код: https://github.com/kamami/prototype/blob/RealDatabase/src/components/ProgressMobileStepper.jsx
квадратная скобка должна выглядеть как keys['_1']
Спасибо за ответ, но это дает мне следующую ошибку: "ключи" не определены. Я отредактировал свой пост и добавил для вас репо на github :)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы не можете создать объект с таким именем свойства, как keys._1.
Вам нужно будет сделать это в 2 этапа:
var o = {};
o.keys = {};
o.keys._1 = this.props.code;
Если это было намерение, вы можете процитировать его
o['keys._1'] = this.props.code;
Вы можете создать объект со значением имени свойства, используя квадратную скобку, т.е. {[keys._1]: "некоторая ценность"} @Karel Frajták
updateKeys() {
let user = JSON.parse(localStorage.getItem('user'));
var requestUrl = 'https://mighty-atoll-75521.herokuapp.com/users/';
var id = user._id
fetch(requestUrl + id, {
method: 'put',
headers: {
...authHeader(),
'Accept': 'application/json, text/plain, */*',
'Content-Type': 'application/json'
},
body: JSON.stringify({[keys._1]: this.props.code})
})
}
Я не думаю, что OP на самом деле пытается этого добиться. См. Ответ Карела.
@JaredSmith посмотрел на ошибку, компиляция завершилась неудачно в тот момент, когда он устанавливал ключ. По моему решению, которое устраняет ошибку. Ясно, что он хочет использовать значение keys._1 в качестве ключа, поэтому я считаю, что мое решение сработает для него.
Спасибо за ответ, но это дает мне следующую ошибку: "ключи" не определены. Я отредактировал свой пост и добавил для вас репо на github :)
@MartinSeubert, это ваш код, поэтому вы должны знать, откуда берется keys, @Alfred работает с тем, что вы предоставили.
@ KarelFrajták keys - это свойство в моем json.
@MartinSeubert Я думал, что keys - это объект с узлом _1. По сути, отправка значения keys._1 как ключа со значением this.props.code на бэкэнд.
@ KarelFrajták Именно так! Венн, мое тело выглядит, например, вот так: body: JSON.stringify ({firstName: this.props.code}) он работает нормально. Но body: JSON.stringify ({[keys._1]: this.props.code}) дает мне ошибку: «ключи» не определены
Вы пытаетесь использовать переменную как «свойство», поэтому вам нужен ComputedPropertyName из ES6. Попробуйте с
body: JSON.stringify({[keys._1]: this.props.code})
вместо
body: JSON.stringify({keys._1: this.props.code})
Спасибо за ответ, но это дает мне следующую ошибку: "ключи" не определены. Я отредактировал свой пост и добавил для вас репо на github :)
Давай попробуем еще :). Я думаю, вы хотите обновить JSON, и вы передаете path, чтобы изменить его, поэтому он будет одним из следующих: 1) {'keys._1': this.props.code} 2) {'keys': { '_1': this.props.code}}
Хорошо :) Итак, мой последний json должен выглядеть так: code [{"keys": {"_1": "12345", "_2": "6789", "_3": "111213"}}] code
У меня есть несколько предметов, каждый со своим кодом. Когда я нажимаю кнопку в своем приложении, этот код должен быть размещен в api, чтобы каждый пользователь мог сохранить все свои купленные коды! Надеюсь, это проясняет ситуацию :) Или массив будет лучшим решением?
Даже если у вас есть несколько элементов, когда вы нажимаете кнопку, вы хотите обновить именно этот user, а не весь ваш массив, не так ли? поэтому в body вы должны сохранить ту же структуру, что и у вашего пользователя, а не массив. Я имею в виду, если ваша структура user - это `{" keys ": {" _1 ":". "," _2 ":". ",}," FirstName ":" Martin "," lastName ":" Seubert "," имя пользователя ":" admin "}` и вы хотите изменить keys._1, body должен выглядеть так: {'keys': { '_1': this.props.code}} (та же структура, что и у user)
Работает как шарм, ты спас мне день! Спасибо
Чтобы было понятно, я не хочу, чтобы значения были моими новыми ключами. Я просто хочу перезаписать свои старые значения!
Я пробовал вот это:
body: JSON.stringify({[user.keys[[this.props.matchId]]]: this.props.code})
Но в моих инструментах разработчика это выглядит так:
В качестве ключа он принимает значение, но я этого не хочу. Должно получиться так:
{key._1: true}
Используйте квадратную скобку для
keys._1