2

I have some JSON file:

{
  "cis" : [ {
    "ucmdbId" : "835cfedfaabc32a1358b322ff3bae056",
    "type" : "running_software",
    "properties" : {
      "display_label" : "jboss (site1.ru)"
    }
  }, {
    "ucmdbId" : "7ef9f21c132c12b3d8d2af0964cc5970",
    "type" : "node",
    "properties" : {
      "display_label" : "site2.ru"
    }
  } ],
  "relations" : [ {
    "ucmdbId" : "80c42edbe32fbb4c25621756ec9e09d2",
    "type" : "compound_f",
    "properties" : null,
    "end1Id" : "23e30baf2320a3274d0aa1e7f56cdaef",
    "end2Id" : "15af0ba134327d32a0c5c72450e63fcd"
  }, {
    "ucmdbId" : "7fe9fb15d4462d1212aeee4aef2f32b4",
    "type" : "compound_f",
    "properties" : null,
    "end1Id" : "23e30baf2320a3274d0aa327f56cdaef",
    "end2Id" : "9232dd2621b814da632932e8cd33ffc8"
  } ]
}

I only need the cis array. So this is what I need to parse:

[{
  "ucmdbId" : "835cfedfaabc32a1358b322ff3bae056",
  "type" : "running_software",
  "display_label" : "jboss (site1.ru)"
 }, {
  "ucmdbId" : "7ef9f21c132c12b3d8d2af0964cc5970",
  "type" : "node",
  "display_label" : "site2.ru"
}]

Python script:

#!/usr/bin/python
import sys
import os
import tablib
import pandas as pd
import json
from pandas.io.json import json_normalize

f = open('/home/nik/test.json', 'rw')
jsonArray = f.read()
f.close
data = json.dumps(json.loads(jsonArray)['cis'])
jsonResult = pd.read_json(data)
array = json.loads(jsonArray)

print jsonArray
jsonResult.to_excel('/home/nik/output.xlsx', sheet_name='Sheet1')

But how can I get key parameters? I try to use:

print data['type'].keys()
print data['type']

But it gives me error:

AttributeError: 'str' object has no attribute 'keys'

How can I get the proper JSON format?

Update. Solution:

Thanks, it works. My complete code to export JSON into xlsx file:

#!/usr/bin/python
import subprocess
import sys
import os
import tablib
import pandas as pd
import json
import glob
import string

path = '/home/nik/json'
for jsonfile in glob.glob(os.path.join(path, '*.json')):
#jsonfile = '/home/nik/test.json'
    with open(jsonfile) as data_file:
        data = json.load(data_file)

    JSON = '[{ \n'
    for index, item in enumerate(data['cis']):
        ucmdbId = (item['ucmdbId'])
        type = (item['type'])
        display_label = (item['properties']['display_label'])
        Text1 = '  \"ucmdbId\" : \"%s\",' %(ucmdbId)
        Text2 = '  \"type\" : \"%s\",' %(type)
        Text3 = '  \"display_label\" : \"%s\",' %(display_label)
        if index==(len(data['cis'])-1):
            End = '}]'
        else:
            End = '}, {'
        JSON += Text3+'\n'+Text2+'\n'+Text1+'\n'+End+'\n'

    JSON = JSON.translate({ord(c): None for c in '\/'})
    jsonResult = pd.read_json(JSON)
    jsonResult = jsonResult.sort_values(by='type')
    jsonResult.to_excel(jsonfile+'.xlsx', sheet_name='Object monitoring', index=False)
2
  • 1
    data['type'] returns something like "running_software". That’s a string, not a dictionary. Commented Sep 27, 2017 at 12:10
  • data['type'] will be a str object, namely "running_software" or "node". This object has no .key() method. What did you expect to happen? Commented Sep 27, 2017 at 12:10

1 Answer 1

1
import json
from pprint import pprint
jsonfile = 'C:\\temp\\temp.json' # path to your json file
with open(jsonfile) as data_file:    
    data = json.load(data_file)
pprint(data['cis'])

The above will give you just the cis array. Below is a more granular output

for item in data['cis']:
    ucmdbId = (item['ucmdbId'])
    type = (item['type'])
    display_label = (item['properties']['display_label'])
    print(ucmdbId)
    print(type)
    print(display_label)

If you want it with key labels then use

for item in data['cis']:
    ucmdbId = (item['ucmdbId'])
    type = (item['type'])
    display_label = (item['properties']['display_label'])
    print('ucmdbId:{}'.format(ucmdbId))
    print('type:{}'.format(type))
    print('display_label:{}'.format(display_label))
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.