[实践OK]通过命令行能不能打印易读的Json数据怎么办?接合windows使用curl命令输出json并格式化的方法。及升级CentOS下的python到3.3版本的步骤,升级后yum except KeyboardInterrupt, e: 错误。

jackxiang 2015-3-9 17:31 | |
背景:我很喜欢在命令行调试API,返回数据都是JSON格式的。打印出来的内容太痛苦了,如:{"status":200,"data":[{"id":1000,"name":"John"}{"id":1004,"name":"Tom"}]},有木有工具打印个易读的样式,这样的


实践一:
答:可以使用python的json.tool!
cat json|python -mjson.tool

cat json|python -mjson.tool
python: module json.tool not found
json是python3内置模块,在包libpython3.3-stdlib中提供。
centOS的默认的python版本是V2.4.3,但运行json库也好需要的版本是3以上,linux(CentOS)下升级python3.3:
http://lovebeyond.iteye.com/blog/1770476 ,后面升级后就Ok了,自带这个包,相当靠谱~  AddTime:2015-03-09


echo '{"status":200,"data":[{"id":1000,"name":"John"},{"id":1004,"name":"Tom"}]}'|python -mjson.tool
Vim中格式化json数据:
命令模式下
#!python -m json.tool
可以映射快捷键,如Ctrl+F6,编辑vimrc:

“ Format JSON data using python module json.tool
map <C-F6> :#!python -m json.tool<CR>

vim调用python格式化json数据:


实践二,根据1接合windows使用curl命令输出json并格式化的方法:
windows中使用curl命令需要下载curl工具

下载地址:http://curl.haxx.se/download.html

请选择不带SSL的版本,否则还需要安装SSL的支持包

我下载的版本 http://www.paehl.com/open_source/?CURL_7.28.1
下载后解压,将exe文件拷贝到 C:\windows\system32目录下即可在cmd中直接调用

我使用linux下成功的相同命令去发现报错如下:



网上查发现是引号的原因,

例如linux下成功命令格式如下:

来自:http://blog.csdn.net/lipei1220/article/details/8536520
http://blog.longwin.com.tw/2012/12/cli-python-json-formatter-2012/
http://blog.csdn.net/yuechuzhao/article/details/24460781
http://openwares.net/linux/vim_call_python_format_json.html







————————————————————linux(CentOS)下升级python3.3———————————————————————————
CentOS下的Python版本一般都比较低,很多应用都需要升级python来完成。我装的centOS的默认的python版本是V2.4.3,但运行node.js需要的版本是2.5以上。

1。下载python3.3安装包:wget http://www.python.org/ftp/python/3.3.0/Python-3.3.0.tgz

2。解压安装包:tar -zxvf Python-3.3.0.tgz
  

3。进入解压后目录:cd Python-3.3.0


4。创建安装目录:mkdir /usr/local/python3.3
  

5。编译安装:./configure --prefix=/usr/local/python3.3

6。执行:make && make install

7。此时已完成新版本的安装,但由于老版本还在系统中,所以需要将原来/usr/bin/python链接改为新的连接:a.先修改老的连接,执行:mv /usr/bin/python /usr/bin/python_bak。b.再建立新连接: ln -s /usr/local/python3.3/bin/python3.3 /usr/bin/python

8。查询python版本,执行:python

显示如下:
Python 3.3.0 (default, Jan 16 2013, 17:52:44)
[GCC 4.1.2 20071124 (Red Hat 4.1.2-42)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
已安装成功了。恭喜你。

实际情况,一堆老版本,还得都给挪动一下,否则还是2.7啥的:
/usr/bin/python2.4
mv /usr/bin/python2.4  /usr/bin/python2.4_bak
ln -s /usr/local/python3.3/bin/python3.3 /usr/bin/python2.4

/usr/local/bin/python2.7
mv /usr/local/bin/python2.7 /usr/local/bin/python2.7_bak
ln -s /usr/local/python3.3/bin/python3.3 /usr/local/bin/python2.7

实践来源:http://lovebeyond.iteye.com/blog/1770476


最后,json显示结构化Ok了:
[root@test Python-3.3.0]# echo '{"status":200,"data":[{"id":1000,"name":"John"},{"id":1004,"name":"Tom"}]}'|python -mjson.tool
{
    "data": [
        {
            "id": 1000,
            "name": "John"
        },
        {
            "id": 1004,
            "name": "Tom"
        }
    ],
    "status": 200
}

再结合Curl这个命令行显示一把,实践如下:
cat json.php

shell访问,直接访问json是一行,后面直接加上python的解析后变成了一个格式化的json串显示出来了,达到了目的,如下:
[root@test tools.jackxiang.com]# curl -H"Host:t43.jackxiang.com" "http://192.168.109.8/json.php"
    {  "status":200,  "data":  [  {  "id":1000,  "name":"John"  },  {  "id":1004,  "name":"Tom"  }  ]  }  [root@test tools.jackxiang.com]# curl -H"Host:t43.jackxiang.com" "http://192.168.109.8/json.php"                            vi json.php
[root@test tools.jackxiang.com]# curl -H"Host:t43.jackxiang.com" "http://192.168.109.8/json.php" | python -mjson.tool  
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   106    0   106    0     0  51381      0 --:--:-- --:--:-- --:--:--     0
{
    "data": [
        {
            "id": 1000,
            "name": "John"
        },
        {
            "id": 1004,
            "name": "Tom"
        }
    ],
    "status": 200
}


最后,当python升级到3后,yum出现:except KeyboardInterrupt, e:
问题:
——————————————————————————————————
[root@name user]# yum
File "/usr/bin/yum", line 30
except KeyboardInterrupt, e:
^
原因:
这是因为yum采用python作为命令解释器,这可以从/usr/bin/yum文件中第一行#!/usr/bin/python发现。而python版本之间兼容性不太好,使得2.X版本与3.0版本之间存在语法不一致问题。而CentOS 5自带的yum采用的是python2.4,当系统将python升级到2.6或3.0后,出现语法解释错误。
解决办法:
很简单,一是升级yum,一是修改yum的解释器为旧版本python2.4(如果你没有采用覆盖升级的话)
升级yum的作法就不详述了;
修改yum的解释器为旧版本python2.4:
     vi /usr/bin/yum

     将第一行"#!/usr/bin/python" 改为 "#!/usr/bin/python2.4"即可,我自己是修改:
      /usr/bin/python2.4_bak  //前面挪动到这儿了,实践是OK的~

摘自:http://blog.sina.com.cn/s/blog_67d6a2650100jiaw.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/7850/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2015-3-10 17:57
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]