Json序列化对象供其他语言读写

JavaScript Object Notation

Json是被设计为跨语言使用的

Json是文本格式

Json必须使用unicode编码,默认utf-8方式存储

In [2]: import sysIn [4]: from hostinfo.models import *#host=‘133’ 的有两条记录,太多了,报错In [5]: Host.objects.all()Out[5]: [
]In [6]: Host.objects.get(hostname='133')---------------------------------------------------------------------------MultipleObjectsReturned       #删除host=‘133’,只保留一个In [9]: Host.objects.get(hostname='133')  Out[9]: 
In [10]: Host.objects.get(hostname='134')---------------------------------------------------------------------------DoesNotExist                              Traceback (most recent call last)
 in 
()In [11]: host = Host.objects.get(hostname='133')In [1]: import jsonIn [2]: d = {}In [3]: d['a'] = 'a'In [4]: d['b'] = 255In [5]: d['c'] = 255In [6]: d['c'] = ('c1','c2')In [7]: d['d'] = TrueIn [8]: d['e'] = None In [9]: with open('/tmp/d.json', mode = 'w') as fd:   ...:     json.dump(d,fd)   ...:     In [10]: cat /tmp/d.json{"a": "a", "c": ["c1", "c2"], "b": 255, "e": null, "d": true}In [11]: with open('/tmp/d.json') as fd:    ...:     d1 = json.load(fd)    ...:     #unicode 编码In [12]: d1 Out[12]: {u'a': u'a', u'b': 255, u'c': [u'c1', u'c2'], u'd': True, u'e': None}In [13]: type(d1)Out[13]: dictIn [14]: d1['a']Out[14]: u'a'In [15]: type(d1['a'])Out[15]: unicodeIn [21]: host =Host.objects.get(hostname='133')In [22]: host.hostnameOut[22]: u'133'In [23]: host.ipOut[23]: u'112.65.140.133'In [24]: host.ip= '192.168.1.107' #这种方法直接修改数据库In [25]: host.save()#保存到数据库中In [26]: host.ipOut[26]: '192.168.1.107'

这种方法可以直接保存数据到python的数据库中,在浏览器可以查看IP已经更改为:192.168.1.107

重要:因为每台主机的sn来判断这台主机是否存在。

[root@133 simplecmdb-json]# vim hostinfo/views.pyfrom django.shortcuts import renderfrom django.http import HttpResponsefrom hostinfo.models import Hostimport pickleimport json# Create your views here.def collect(req):    if req.POST:        print req.body        #print pickle.loads(req.body)        #obj =  pickle.loads(req.body)        obj = json.loads(req.body)        hostname = obj['hostname']        ip = obj['ip']        osver = obj['osver']        vendor = obj['vendor']        product = obj['product']        cpu_model = obj['cpu_model']        cpu_num = obj['cpu_num']        memory = obj['memory']        sn = obj['sn']        #如果存在 sn=4HBDT2X主机,直接执行后边的赋值操作,相当于更新服务器信息,比如IP地址更新。        try:            host = Host.objects.get(sn =sn)                #如果不存在sn=4HBDT2X主机,实例化一个host,然后host.save()保存信息。相当于增加一台服务器配置信息        except:             host = Host()        #exit , update ......        host.hostname = hostname        host.ip = ip        host.osver = osver        host.vendor = vendor        host.product = product        host.cpu_model = cpu_model        host.cpu_num = cpu_num        host.memory = memory        host.sn = sn        host.save()        return HttpResponse('OK')    else:        return HttpResponse('no data')

更新sn=4HBDTX信息

[root@133 simplecmdb-json]# pwd/opt/python/django/simplecmdb-json[root@133 simplecmdb-json]# python sysinformation-pickle.py OK

浏览器查看:ip地址已经更新,并没有新增加服务器信息。

根据sn号判断没有此服务器。在其他服务器上执行该脚本,即可自动将信息收集到cmdb上。

[root@localhost tmp]# python sysinformation-pickle.py