Парсинг JSON



  • Коллеги, как можно получить количество элементов объекта JSON (обвёл в красную рамку)?
    0_1561392432276_03d79c95-53cc-44ec-a849-9ed0b6b6e821-image.png
    Как я понимаю есть 2 пути:

    1. написать регулярку
      или
    2. написать java script
      Может кто-нибудь поделиться готовым решением? Могу заплатить.


  • @tochka отвечу вам тоже только картинкой))

    0_1561393835941_2019-06-24_193014.jpg



  • @uraabk Надо было еще телефоном сфотографировать, перевернутым... ))))



  • @uraabk
    Извиняюсь, вот код ответа:

    {
      "spreadsheetId": "123456",
      "valueRanges": [
        {
          "range": "Sheet1!B1:B1000",
          "majorDimension": "COLUMNS",
          "values": [
            [
              "",
              "Moscow",
              "Kiev",
              "New York",
              "London"
            ]
          ]
        }
      ]
    }
    

    По вашей подсказке попробовал сделать так:
    [[SUM]] = JSON.parse([[SAVED_CONTENT]]).valueRanges.values.length

    но получаю ошибку: "TypeError: Result of expression 'JSON.parse(VAR_SAVED_CONTENT).valueRanges.values' [undefined] is not an object."



  • @tochka said in Парсинг JSON:

    [[SUM]] = JSON.parse([[SAVED_CONTENT]]).valueRanges[0].values[0].length



  • @usertrue @uraabk
    Спасибо большое! Скиньте свой номер ЯД — отблагодарю)



  • @tochka Спасибо достаточно )



  • Подскажите как взять все 20 значений json как в действии "Регулярные выражения" > "Извлечь все данные". На данный момент этот код

    x.response.continuationContents.itemSectionContinuation.contents[0].compactVideoRenderer.videoId
    

    Берёт только 1 id из 20 . Как сграбить все 20 сразу?



  • @revers Цикл

    list = []
    
    for(i=0;i<20;i++) {
    чего_то += x.response.continuationContents.itemSectionContinuation.contents[i].compactVideoRenderer.videoId // возьмет фсе сразу, но вам не понравится.
    list.push(x.response.continuationContents.itemSectionContinuation.contents[i].compactVideoRenderer.videoId)
    }
    

    upd ваш ключ от json мало поможет в составлении регулярки. Json -ом и получите все.



  • @tts9 said in Парсинг JSON:

    @revers Цикл

    list = []
    
    for(i=0;i<20;i++) {
    чего_то += x.response.continuationContents.itemSectionContinuation.contents[i].compactVideoRenderer.videoId // возьмет фсе сразу, но вам не понравится.
    list.push(x.response.continuationContents.itemSectionContinuation.contents[i].compactVideoRenderer.videoId)
    }
    

    upd ваш ключ от json мало поможет в составлении регулярки. Json -ом и получите все.

    Сейчас использую такую регулярку:
    Извлечь все данные

    watchEndpoint":{"videoId":"(.*?)"}},"shortBylineText
    

    Но бывает что лишнее парсит, поэтому ищу аналог через "выполнить код"
    что то вроде этого:

    [[VIDEOID]] = JSON.parse([[SAVED_CONTENT]]).ЧТО ТУТ ПИСАТЬ?
    


  • @revers такого нет.



  • @revers
    И да зачем? вы получаете это регуляркой? я вам дал json выражение, список list содержит все значения
    ключа videoId вам что все набить?

    json_check = function (string) {
        try { JSON.parse(string); var result = true }
        catch (e) { var result = false }; return result
    }
    
    VAR_LIST = []
    if(json_check([[SAVED_CONTENT]]) {
      var json = JSON.parse([[SAVED_CONTENT]]
    for(i=0;i<=19;i++) {
    VAR_LIST.push(json.x.response.continuationContents.itemSectionContinuation.contents[i].compactVideoRenderer.videoId)
    }
    }
    


  • Спасибо, будем разбираться.


Log in to reply
 

  • 2
  • 21
  • 5
  • 9
  • 2
  • 4
  • 2
  • 9