cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
287
Views
0
Helpful
5
Replies

Load JSON Data with embedded List

Netmart
Level 1
Level 1

Hello, 

I wanted to filter from following json load retried from WebEx Room list and print only the rooms.

The current script returns the following error:

json.decoder.JSONDecodeError

 

Traceback (most recent call last):
File "jsonWebExGetRoomFromList.py", line 23, in <module>
items = json.loads(json_data)
File "/usr/lib/python3.8/json/__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.8/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.8/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 2 column 1 (char 1)

Script:

import json
'''
json format key:value
here: value presense a nested list with one element, index 0
 [{"title":"Cisco_systems",...}]

'''
json_data = """
('{"items":[{"id":"Y2lzY29zcGFyazovL3VybjpURUFNOnVzLXdlc3QtMl9yL1JPT00vOTczYzc2YzAtNmIwNy0xMWVmLTg2ZmQtZmIwNGJjN2EwZGVh","title":"DevAsc '
 'Team '
 'Room","type":"group","isLocked":false,"lastActivity":"2024-09-04T21:49:41.804Z","creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS85MGU0NWQ2ZS04MDYyLTQzNjgtODYxMi02N2VlOWY4YjAzYmE","created":"2024-09-04T21:49:41.804Z","ownerId":"Y2lzY29zcGFyazovL3VzL09SR0FOSVpBVElPTi8zZTUzZmQyYy1mZTJiLTQwMTQtOGUyZC1jNWFmN2IwZmYyM2Q","isPublic":false,"isReadOnly":false},{"id":"Y2lzY29zcGFyazovL3VybjpURUFNOnVzLXdlc3QtMl9yL1JPT00vMDdkMjUyMDAtNmIwNC0xMWVmLWE5MDEtZGIxNTI3NzkyNWQ0","title":"DevNet '
 'Associate Certification Team - '
 'Martin","type":"group","isLocked":true,"lastActivity":"2024-09-04T21:24:12.704Z","teamId":"Y2lzY29zcGFyazovL3VybjpURUFNOnVzLXdlc3QtMl9yL1RFQU0vMDdkMjUyMDAtNmIwNC0xMWVmLWE5MDEtZGIxNTI3NzkyNWQ0","creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS85MGU0NWQ2ZS04MDYyLTQzNjgtODYxMi02N2VlOWY4YjAzYmE","created":"2024-09-04T21:24:12.704Z","ownerId":"Y2lzY29zcGFyazovL3VzL09SR0FOSVpBVElPTi8zZTUzZmQyYy1mZTJiLTQwMTQtOGUyZC1jNWFmN2IwZmYyM2Q","isPublic":false,"isReadOnly":false},{"id":"Y2lzY29zcGFyazovL3VybjpURUFNOnVzLXdlc3QtMl9yL1JPT00vYzNiYmQxNjAtNmIwMS0xMWVmLWE3ZDctZDU5NzFiYWEzODY2","title":"DevNet '
 'Associate Certification Team - '
 'Martin","type":"group","isLocked":true,"lastActivity":"2024-09-04T21:07:59.478Z","teamId":"Y2lzY29zcGFyazovL3VybjpURUFNOnVzLXdlc3QtMl9yL1RFQU0vYzNiYmQxNjAtNmIwMS0xMWVmLWE3ZDctZDU5NzFiYWEzODY2","creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS85MGU0NWQ2ZS04MDYyLTQzNjgtODYxMi02N2VlOWY4YjAzYmE","created":"2024-09-04T21:07:59.478Z","ownerId":"Y2lzY29zcGFyazovL3VzL09SR0FOSVpBVElPTi8zZTUzZmQyYy1mZTJiLTQwMTQtOGUyZC1jNWFmN2IwZmYyM2Q","isPublic":false,"isReadOnly":false},{"id":"Y2lzY29zcGFyazovL3VybjpURUFNOnVzLXdlc3QtMl9yL1JPT00vMjIzNzc3ZDAtM2VlOC0xMWVmLWE5NmMtNzVhMGU3YzYzNTY1","title":"test-title","type":"group","isLocked":false,"lastActivity":"2024-07-10T18:13:39.917Z","creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS85MGU0NWQ2ZS04MDYyLTQzNjgtODYxMi02N2VlOWY4YjAzYmE","created":"2024-07-10T18:13:39.917Z","ownerId":"Y2lzY29zcGFyazovL3VzL09SR0FOSVpBVElPTi8zZTUzZmQyYy1mZTJiLTQwMTQtOGUyZC1jNWFmN2IwZmYyM2Q","description":"test","isPublic":false,"isReadOnly":false},{"id":"Y2lzY29zcGFyazovL3VzL1JPT00vOTIxZTMwNDAtM2NkNC0xMWVmLTkyOTQtMDk1ODZmN2RmNjRi","title":"Collaboration '
 'Toolbox Alert '
 'Bot","type":"direct","isLocked":false,"lastActivity":"2024-08-21T16:59:58.714Z","creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS9iZDZkNmU4OC1hM2ExLTQ1NTctYjM2Ny0yMWZkMmEyN2FlYzE","created":"2024-07-08T02:48:35.396Z","ownerId":"Y2lzY29zcGFyazovL3VzL09SR0FOSVpBVElPTi8zZTUzZmQyYy1mZTJiLTQwMTQtOGUyZC1jNWFmN2IwZmYyM2Q","isPublic":false,"isReadOnly":false},{"id":"Y2lzY29zcGFyazovL3VzL1JPT00vZjExNTkyNDAtMzZiNC0xMWVlLTlmNTYtNzdjODJhMWFmY2Mz","title":"Bliemel, '
 'Rene","type":"direct","isLocked":false,"lastActivity":"2023-08-18T13:37:16.478Z","creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS8zNmI1YTczYy03NWQ2LTQ0YjAtYjZmZS02YjZhOGI1MzViZTg","created":"2023-08-09T13:02:06.180Z","isPublic":false,"isReadOnly":false},{"id":"Y2lzY29zcGFyazovL3VybjpURUFNOnVzLXdlc3QtMl9yL1JPT00vZjBlOTg5NjAtZjkyMC0xMWVkLWJmYzktMmY2M2EzNjJkYTIw","title":"Welcome '
 'Space","type":"group","isLocked":false,"lastActivity":"2023-05-23T04:18:59.446Z","creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS85MGU0NWQ2ZS04MDYyLTQzNjgtODYxMi02N2VlOWY4YjAzYmE","created":"2023-05-23T04:18:59.446Z","ownerId":"Y2lzY29zcGFyazovL3VzL09SR0FOSVpBVElPTi8zZTUzZmQyYy1mZTJiLTQwMTQtOGUyZC1jNWFmN2IwZmYyM2Q","isPublic":false,"isReadOnly":false}]}')
"""

items = json.loads(json_data)

# Accessing the entire nested array
#print(items)

# Accessing a specific element within the nested list
'''
variable itmes parsed load from json_data
key "items", with nested List of value with one element, index0:
Index 0 contains an array of nested json key-value pairs
print value of key page_id
'''
print(items["items"][0]['title'])
 
Console Output:
Traceback (most recent call last):
File "jsonWebExGetRoomFromList.py", line 23, in <module>
items = json.loads(json_data)
File "/usr/lib/python3.8/json/__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.8/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.8/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 2 column 1 (char 1)
 
I appreciate any input.
5 Replies 5

Marcel Zehnder
Spotlight
Spotlight

Hi, the string in your json_data is not valid JSON. Try to delete the opening (' and closing '):

json_data = """
{"items":[ 
  {"id":"room1foobar"},
  {"id":"room2foobar"},
  {"id":"room3foobar"}
]}
"""

 

Hi Marcel,

Thank you for your suggestion, but I am still receiving the same error message:

 

json.decoder.JSONDecodeError: Invalid control character at: line 2 column 137 (char 137)
PS D:\Network_ComputerScience\CISCO\Certifications\CiscoDevNet\Cisco Certified DevNet Associate DEVASC 200-901\Python Scripts>

 

Removed ('...')

json_data = """
{"items":[{"id":"Y2lzY29zcGFyazovL3VybjpURUFNOnVzLXdlc3QtMl9yL1JPT00vOTczYzc2YzAtNmIwNy0xMWVmLTg2ZmQtZmIwNGJjN2EwZGVh","title":"DevAsc '
 'Team '
 'Room","type":"group","isLocked":false,"lastActivity":"2024-09-04T21:49:41.804Z","creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS85MGU0NWQ2ZS04MDYyLTQzNjgtODYxMi02N2VlOWY4YjAzYmE","created":"2024-09-04T21:49:41.804Z","ownerId":"Y2lzY29zcGFyazovL3VzL09SR0FOSVpBVElPTi8zZTUzZmQyYy1mZTJiLTQwMTQtOGUyZC1jNWFmN2IwZmYyM2Q","isPublic":false,"isReadOnly":false},{"id":"Y2lzY29zcGFyazovL3VybjpURUFNOnVzLXdlc3QtMl9yL1JPT00vMDdkMjUyMDAtNmIwNC0xMWVmLWE5MDEtZGIxNTI3NzkyNWQ0","title":"DevNet '
 'Associate Certification Team - '
 'Martin","type":"group","isLocked":true,"lastActivity":"2024-09-04T21:24:12.704Z","teamId":"Y2lzY29zcGFyazovL3VybjpURUFNOnVzLXdlc3QtMl9yL1RFQU0vMDdkMjUyMDAtNmIwNC0xMWVmLWE5MDEtZGIxNTI3NzkyNWQ0","creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS85MGU0NWQ2ZS04MDYyLTQzNjgtODYxMi02N2VlOWY4YjAzYmE","created":"2024-09-04T21:24:12.704Z","ownerId":"Y2lzY29zcGFyazovL3VzL09SR0FOSVpBVElPTi8zZTUzZmQyYy1mZTJiLTQwMTQtOGUyZC1jNWFmN2IwZmYyM2Q","isPublic":false,"isReadOnly":false},{"id":"Y2lzY29zcGFyazovL3VybjpURUFNOnVzLXdlc3QtMl9yL1JPT00vYzNiYmQxNjAtNmIwMS0xMWVmLWE3ZDctZDU5NzFiYWEzODY2","title":"DevNet '
 'Associate Certification Team - '
 'Martin","type":"group","isLocked":true,"lastActivity":"2024-09-04T21:07:59.478Z","teamId":"Y2lzY29zcGFyazovL3VybjpURUFNOnVzLXdlc3QtMl9yL1RFQU0vYzNiYmQxNjAtNmIwMS0xMWVmLWE3ZDctZDU5NzFiYWEzODY2","creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS85MGU0NWQ2ZS04MDYyLTQzNjgtODYxMi02N2VlOWY4YjAzYmE","created":"2024-09-04T21:07:59.478Z","ownerId":"Y2lzY29zcGFyazovL3VzL09SR0FOSVpBVElPTi8zZTUzZmQyYy1mZTJiLTQwMTQtOGUyZC1jNWFmN2IwZmYyM2Q","isPublic":false,"isReadOnly":false},{"id":"Y2lzY29zcGFyazovL3VybjpURUFNOnVzLXdlc3QtMl9yL1JPT00vMjIzNzc3ZDAtM2VlOC0xMWVmLWE5NmMtNzVhMGU3YzYzNTY1","title":"test-title","type":"group","isLocked":false,"lastActivity":"2024-07-10T18:13:39.917Z","creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS85MGU0NWQ2ZS04MDYyLTQzNjgtODYxMi02N2VlOWY4YjAzYmE","created":"2024-07-10T18:13:39.917Z","ownerId":"Y2lzY29zcGFyazovL3VzL09SR0FOSVpBVElPTi8zZTUzZmQyYy1mZTJiLTQwMTQtOGUyZC1jNWFmN2IwZmYyM2Q","description":"test","isPublic":false,"isReadOnly":false},{"id":"Y2lzY29zcGFyazovL3VzL1JPT00vOTIxZTMwNDAtM2NkNC0xMWVmLTkyOTQtMDk1ODZmN2RmNjRi","title":"Collaboration '
 'Toolbox Alert '
 'Bot","type":"direct","isLocked":false,"lastActivity":"2024-08-21T16:59:58.714Z","creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS9iZDZkNmU4OC1hM2ExLTQ1NTctYjM2Ny0yMWZkMmEyN2FlYzE","created":"2024-07-08T02:48:35.396Z","ownerId":"Y2lzY29zcGFyazovL3VzL09SR0FOSVpBVElPTi8zZTUzZmQyYy1mZTJiLTQwMTQtOGUyZC1jNWFmN2IwZmYyM2Q","isPublic":false,"isReadOnly":false},{"id":"Y2lzY29zcGFyazovL3VzL1JPT00vZjExNTkyNDAtMzZiNC0xMWVlLTlmNTYtNzdjODJhMWFmY2Mz","title":"Bliemel, '
 'Rene","type":"direct","isLocked":false,"lastActivity":"2023-08-18T13:37:16.478Z","creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS8zNmI1YTczYy03NWQ2LTQ0YjAtYjZmZS02YjZhOGI1MzViZTg","created":"2023-08-09T13:02:06.180Z","isPublic":false,"isReadOnly":false},{"id":"Y2lzY29zcGFyazovL3VybjpURUFNOnVzLXdlc3QtMl9yL1JPT00vZjBlOTg5NjAtZjkyMC0xMWVkLWJmYzktMmY2M2EzNjJkYTIw","title":"Welcome '
 'Space","type":"group","isLocked":false,"lastActivity":"2023-05-23T04:18:59.446Z","creatorId":"Y2lzY29zcGFyazovL3VzL1BFT1BMRS85MGU0NWQ2ZS04MDYyLTQzNjgtODYxMi02N2VlOWY4YjAzYmE","created":"2023-05-23T04:18:59.446Z","ownerId":"Y2lzY29zcGFyazovL3VzL09SR0FOSVpBVElPTi8zZTUzZmQyYy1mZTJiLTQwMTQtOGUyZC1jNWFmN2IwZmYyM2Q","isPublic":false,"isReadOnly":false}]}
"""

Marcel Zehnder
Spotlight
Spotlight

yeah, beacause the string in your json_data variable is still not valid JSON. Use a linter (for example online https://jsonlint.com/), to check if the string is valid JSON.

Confirmed - not json format.

Is there any other way to extract the value of key 'title'" of this string?

Marcel Zehnder
Spotlight
Spotlight

If you want to list the titles of all your webex-rooms, you can use the following script.

import requests
import os

webex_access_token = os.getenv("WEBEX_TOKEN")
headers = {
    "Authorization": f"Bearer {webex_access_token}"
}

r = requests.get("https://webexapis.com/v1/rooms", headers=headers)
if r.ok:
    json_data = r.json()
    room_titles = [room.get("title") for room in json_data.get("items")]
    print("WEBEX-ROOMS:")
    for title in sorted(room_titles):
        print(title)
else:
    print(r.status_code)
    print(r.text)

before running it you need to store your access token in a env var named WEBEX_TOKEN:

export WEBEX_TOKEN="<your access token>"

HTH
Marcel