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, но что-то у меня сложилось впечатление, что ни для чего кроме парсинга он не подойдет.

    вы бы код обрамляли соответствующим образом
    3bb4694b-ad67-4777-9979-162bf1f48aca-изображение.png
    а то форум может съесть часть символов посчитав их оформлением текста



  • Прошу прощения, сейчас сделаю обрамление, уже просто несколько часов вожусь, устал.



  • @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 запрос.

    eca95c5a-f90f-4de7-b29e-d18fe2b07cbf-image.png

    Сайт вообще кривой как не знаю что, я 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


Log in to reply