Json целиком с добавлением значения
-
Всем добрый день, есть код -
{"list":[{"id":444,"requests":[{"name":"222","amount":1}],"note":null,"botRequestBy":null,"nonlistSong":null,"donationAmount":1,"createdAt":"2020-02-02T18:27:28.762Z","prevId":null,"song":{"title":"555","artist":"","createdAt":"2019-02-05T23:05:23.000Z","attributeIds":[]},"songId":222,"streamerId":999,"position":1}
через запятую все идет тоже самое, но без листа {"id":445,"requests": и тд.
Требуется по названию песни "title":"555" - получить целиком строку
{"id":444,"requests":[{"name":"222","amount":1}],"note":null,"botRequestBy":null,"nonlistSong":null,"donationAmount":1,"createdAt":"2020-02-02T18:27:28.762Z","prevId":null,"song":{"title":"555","artist":"","createdAt":"2019-02-05T23:05:23.000Z","attributeIds":[]},"songId":222,"streamerId":999,"position":1}
После чего добавить в ней значение - {"name":"2","amount":2} на выходе мы получаем:
{"id":444,"requests":[{"name":"222","amount":1},{"name":"2","amount":2}],"note":null,"botRequestBy":null,"nonlistSong":null,"donationAmount":1,"createdAt":"2020-02-02T18:27:28.762Z","prevId":null,"song":{"title":"555","artist":"","createdAt":"2019-02-05T23:05:23.000Z","attributeIds":[]},"songId":222,"streamerId":999,"position":1}
Заранее большое спасибо.
Сделал на JS, но BAS такие извращения не кушает, к сожалению.
Реализация на JS:
let func_search = function(jsonstr, title_song) { let obj = JSON.parse(jsonstr); let result; obj.list.forEach(function(item, i, arr) { if (item.song.title == title_song) { item.requests.push({"name":"Alex","amount":1}); //console.log(item.requests); result = item; } }); return result; }; let result = func_search(jsonstr, "555");
Пытался разобраться с JSonPath, но что-то у меня сложилось впечатление, что ни для чего кроме парсинга он не подойдет.
-
@lcatlas said in Json целиком с добавлением значения:
Всем добрый день, есть код - {"list":[{"id":444,"requests":[{"name":"222","amount":1}],"note":null,"botRequestBy":null,"nonlistSong":null,"donationAmount":1,"createdAt":"2020-02-02T18:27:28.762Z","prevId":null,"song":{"title":"555","artist":"","createdAt":"2019-02-05T23:05:23.000Z","attributeIds":[]},"songId":222,"streamerId":999,"position":1}, через запятую все идет тоже самое, но без листа {"id":445,"requests": и тд.
Требуется по названию песни "title":"555" - получить целиком строку {"id":444,"requests":[{"name":"222","amount":1}],"note":null,"botRequestBy":null,"nonlistSong":null,"donationAmount":1,"createdAt":"2020-02-02T18:27:28.762Z","prevId":null,"song":{"title":"555","artist":"","createdAt":"2019-02-05T23:05:23.000Z","attributeIds":[]},"songId":222,"streamerId":999,"position":1}
После чего добавить в ней значение - {"name":"2","amount":2} на выходе мы получаем:
{"id":444,"requests":[{"name":"222","amount":1},{"name":"2","amount":2}],"note":null,"botRequestBy":null,"nonlistSong":null,"donationAmount":1,"createdAt":"2020-02-02T18:27:28.762Z","prevId":null,"song":{"title":"555","artist":"","createdAt":"2019-02-05T23:05:23.000Z","attributeIds":[]},"songId":222,"streamerId":999,"position":1}Заранее большое спасибо.
Сделал на JS, но BAS такие извращения не кушает, к сожалению.
Реализация на JS:
let func_search = function(jsonstr, title_song) {
let obj = JSON.parse(jsonstr);
let result;
obj.list.forEach(function(item, i, arr) {
if (item.song.title == title_song) {
item.requests.push({"name":"Alex","amount":1});
//console.log(item.requests);
result = item;
}});
return result;
};
let result = func_search(jsonstr, "555");Пытался разобраться с JSonPath, но что-то у меня сложилось впечатление, что ни для чего кроме парсинга он не подойдет.
вы бы код обрамляли соответствующим образом
а то форум может съесть часть символов посчитав их оформлением текста
-
Прошу прощения, сейчас сделаю обрамление, уже просто несколько часов вожусь, устал.
-
@lcatlas said in Json целиком с добавлением значения:
Всем добрый день, есть код -
json строка не полная
Сделал на JS, но BAS такие извращения не кушает, к сожалению.
замените let на var и будет работать
-
Да, прошу прощения, там очень много значений просто. Сейчас конец вставлю.
С вар - спасибо большое, сейчас поэксперементирую.
-
@lcatlas said in Json целиком с добавлением значения:
Да, прошу прощения, там очень много значений просто. Сейчас конец вставлю.
С вар - спасибо большое, сейчас поэксперементирую.
Только что проверил, всё работает
[[JSON]] = '{"list":[{"id":444,"requests":[{"name":"222","amount":1}],"note":null,"botRequestBy":null,"nonlistSong":null,"donationAmount":1,"createdAt":"2020-02-02T18:27:28.762Z","prevId":null,"song":{"title":"555","artist":"","createdAt":"2019-02-05T23:05:23.000Z","attributeIds":[]},"songId":222,"streamerId":999,"position":1}]}' var func_search = function(jsonstr, title_song) { var obj = JSON.parse(jsonstr); obj.list.forEach(function(item) { if (item.song.title == title_song) { item.requests.push({"name":"Alex","amount":1}); } }); return JSON.stringify(obj) }; log([[JSON]]) [[RESULT]] = func_search([[JSON]], "555"); log([[RESULT]])
тестовый скрипт
Не совсем понятно, зачем вы из функции возвращаете объект найденного в массиве по условию названия песни. Я решил для наглядности вернуть весь изменённый json
-
Он мне требуется для возврата post-ом после изменения обратно на сервер.
-
Вроде уже получше )) Осталось лишнее рубануть, донейтик сейчас подкину.
Так как мне нужна только часть с конкретной песней, начиная с {"id": и заканчивая :1}
-
@lcatlas said in Json целиком с добавлением значения:
Он мне требуется для возврата post-ом после изменения обратно на сервер.
В таком случае я бы сделал проще:
[[JSON]] = '{"list":[{"id":444,"requests":[{"name":"222","amount":1}],"note":null,"botRequestBy":null,"nonlistSong":null,"donationAmount":1,"createdAt":"2020-02-02T18:27:28.762Z","prevId":null,"song":{"title":"555","artist":"","createdAt":"2019-02-05T23:05:23.000Z","attributeIds":[]},"songId":222,"streamerId":999,"position":1}]}' var title = "555" var obj = JSON.parse([[JSON]])["list"].filter(function(c){return c.song.title == title})[0] obj.requests.push({"name":"Alex","amount":1}) [[RESULT]] = JSON.stringify(obj) log([[JSON]]) log([[RESULT]])
тестовый скрипт
-
Эх, все таки лист в начале нужен ))
{"list": [ и закрывающая }
-
@lcatlas said in Json целиком с добавлением значения:
Эх, все таки лист в начале нужен ))
{"list": [ и закрывающая }Дак добавьте, 5 символов кода всего:
[[JSON]] = '{"list":[{"id":444,"requests":[{"name":"222","amount":1}],"note":null,"botRequestBy":null,"nonlistSong":null,"donationAmount":1,"createdAt":"2020-02-02T18:27:28.762Z","prevId":null,"song":{"title":"555","artist":"","createdAt":"2019-02-05T23:05:23.000Z","attributeIds":[]},"songId":222,"streamerId":999,"position":1}]}' var title = "555" var obj = JSON.parse([[JSON]])["list"].filter(function(c){return c.song.title == title})[0] obj.requests.push({"name":"Alex","amount":1}) [[RESULT]] = JSON.stringify({"list":[obj]}) log([[JSON]]) log([[RESULT]])
-
@Fox said in Json целиком с добавлением значения:
JSON.stringify({"list":[obj]})
Прошу прощения, голова уже не варит совсем. На выходе у меня получается }]}
Надо }}, с этим и получилась заминка, к сожалению.
А квадратные скобки после [{"name":"222","amount":1}]
-
@lcatlas said in Json целиком с добавлением значения:
@Fox said in Json целиком с добавлением значения:
JSON.stringify({"list":[obj]})
Прошу прощения, голова уже не варит совсем. На выходе у меня получается }]}
Надо }}, с этим и получилась заминка, к сожалению.
Я вас не понимаю. Json строку я указал валидную, объект с свойством list и значением - массивом объектов. О каких фигурных скобках вы говорите?
-
{"list":[{"id":444,"requests":[{"name":"222","amount":1}],"note":null,"botRequestBy":null,"nonlistSong":null,"donationAmount":1,"createdAt":"2020-02-02T18:27:28.762Z","prevId":null,"song":{"title":"555","artist":"","createdAt":"2019-02-05T23:05:23.000Z","attributeIds":[]},"songId":222,"streamerId":999,"position":1}}
Это мой косяк. Вот оригинал строки.
На выходе у меня получается по коду }]} в конце и теряются [{"name":"222","amount":1} - здесь.
Оригинал [{"name":"222","amount":1}]И в конце }}
-
@lcatlas said in Json целиком с добавлением значения:
{"list":[{"id":444,"requests":[{"name":"222","amount":1}],"note":null,"botRequestBy":null,"nonlistSong":null,"donationAmount":1,"createdAt":"2020-02-02T18:27:28.762Z","prevId":null,"song":{"title":"555","artist":"","createdAt":"2019-02-05T23:05:23.000Z","attributeIds":[]},"songId":222,"streamerId":999,"position":1}}
Это мой косяк. Вот оригинал строки.
На выходе у меня получается по коду }]} в конце и теряются [{"name":"222","amount":1} - здесь.
Оригинал строки является невалидной json строкой, проверьте на https://jsoneditoronline.org/
-
Так указано в документации, в том числе и так приходит Json запрос.
Сайт вообще кривой как не знаю что, я 4 часа пытал разраба, чтобы аунтификацию получить.
Начало приходящего Json - {"list":[{"
Конец - :0}}
-
{ "list": [ { "id": 0, "requests": [ { "amount": 5, "name": "some-user" } ], "note": "string", "botRequestBy": "string", "nonlistSong": "string", "donationAmount": 0, "createdAt": "string", "song": { "title": "string", "artist": "string" }, "songId": 0, "streamerId": 0, "position": 0 } ], "status": { "songsPlayedToday": 0 }, "previousPosition": 0, "queue": { "id": 0, "requests": [ { "amount": 5, "name": "some-user" } ], "note": "string", "botRequestBy": "string", "nonlistSong": "string", "donationAmount": 0, "createdAt": "string", "song": { "title": "string", "artist": "string" }, "songId": 0, "streamerId": 0, "position": 0 } }
Вот так оно у него приходит. Но видимо мне все равно придется пытать разработчика, так как по его методу оно не обновляется, даже если я ставлю, как у него в апи.
В общем спасибо большое, не разберешься так.
-
@lcatlas said in Json целиком с добавлением значения:
Вот так оно у него приходит.
Вот это валидный json
https://jsoneditoronline.org/?id=f077b358dde64dd18d3a765b45353790
-
А где я облажался при сборке? ) Но в целом, оно мне приходит в таком виде по get. Вопрос только как в конце должно быть наверно.
Да беда еще и в том, что урл куда я отдавать должен - 404.
-
@lcatlas said in Json целиком с добавлением значения:
А где я облажался при сборке? ) Но в целом, оно мне приходит в таком виде по get. Вопрос только как в конце должно быть наверно.
Да беда еще и в том, что урл куда я отдавать должен - 404.
я изначально сделал пример, где беру исходную строку, добавляю параметры и возвращаю всю строку, изменённую. Вы же брали только кусок, скорее всего косяк в этом. А вообще, надо читать мануал по api