TypeError: строка должна быть индексами в цикле JSON через массив объектов в arcpy - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь перебрать свой json и получить только массив объектов и получить все объекты, но я не могу понять, где я ошибаюсь в своем коде Python.Вот мой код:

Я посмотрел на эти вопросы за советом, но, похоже, он не работает. TypeError: строковые индексы должны быть целыми ошибками при синтаксическом анализе Json с Python

jsonData = operationalLayers = None
#for testing purposes, parse from a json file
if Web_Map_as_JSON != '':
    jsonData = json.loads(Web_Map_as_JSON)
    operationalLayers = jsonData["operationalLayers"]
    arcpy.AddMessage("We have valid json data")
else:
    with open('json/WLA-FRI-AY-14-subset.json') as data:
        jsonData = json.load(data)
        operationalLayers = jsonData["operationalLayers"]
    print "We parsed json data from a file"

# looping thru only graphics-operation-layer and its sub layers
# and add attributes for each features on the layout
for ol in operationalLayers:
    #hard code the first feature layer
    if (ol["id"] == "ParcelRouteEditingTest_1259"):
        if (ol.has_key('featureCollection')):
            fcol = ol["featureCollection"]
            if (not fcol.has_key('layers')):
                continue
            lyrs = fcol["layers"]

            #loop through layer
            for i in lyrs:
                # feature set data on the graphic layer
                fs = i["featureSet"]
                # store attributes for easy access
                for featureData in fs:
                   featureDataObj = featureData[1]["features"]
                    print featureDataObj
                # queryURL = '{0}/query'.format(i['url'])
                # arcpy.AddMessage(queryURL)
                # getQuery = requests.get(queryURL)
                # if(getQuery.status_code == 200):
                #     fs = getQuery.json()
                    updateLayoutElementWithFeatureAttributes(feature_data_obj, None, pdfPaths)

Вот структура данных json:

JSON structure

Ошибка:

Traceback (most recent call last):
  File "C:\Workspace-TT\pythonprint\customPrint.py", line 299, in <module>
    featureDataObj = featureData[1]["features"]
TypeError: string indices must be integers

1 Ответ

0 голосов
/ 18 сентября 2018

featureSet - это не список, это словарь с geometryType и features в качестве ключей.

Когда вы делаете

for featureData in fs:

, вы перебираете эти ключи.

Если вы имеете в виду перебирать список под features, вы должны сделать что-то вроде

featureset['features'][i]

или

for feature in featureSet['features']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...