2013-03-24 8 views
8

Próbuję upiększyć odpowiedź JSON z curl, ale to nie działa.Prettify JSON z curl w OSX

Narnia:~ vitaly$ curl -s https://api.vk.com/method/photos.getAlbums?uid=6015870&access_token=0275127e915981fe795840165e532169482cbdfc4ca1dbd48619a687a65fead88c468cdafe9743e231c37 | python -m json.tool 
[4] 8822 
No JSON object could be decoded 
Narnia:~ vitaly$ {"response":[{"aid":"109967643","thumb_id":"163950716","owner_id":"6015870","title":"9 мая 2010","description":"","created":"1273613868","updated":"1273695901","size":7},{"aid":"95299056","thumb_id":"135702541","owner_id":"6015870","title":"Kemer 2009","description":"http:\/\/picasaweb.google.com.ua\/Ivanov.Vitalii\/Kemer2009","created":"1250355164","updated":"1250520619","size":72},{"aid":"43368938","thumb_id":"116630327","owner_id":"6015870","title":"Лето 2008 (Алупка)","description":"","created":"1220478168","updated":"1221348162","size":43},{"aid":"38630587","thumb_id":"116886016","owner_id":"6015870","title":"Flowers","description":"","created":"1217680400","updated":"1236774230","size":9},{"aid":"36658103","thumb_id":"163954451","owner_id":"6015870","title":"Моя ката","description":"","created":"1216419744","updated":"1273698620","size":8},{"aid":"23100962","thumb_id":"112723283","owner_id":"6015870","title":"Только пипл","description":"","created":"1208636545","updated":"1210382181","size":9},{"aid":"15473894","thumb_id":"114370266","owner_id":"6015870","title":"other","description":"","created":"1203516879","updated":"1327679223","size":29},{"aid":"15471241","thumb_id":"95266020","owner_id":"6015870","title":"Сам батя или чего нельзя в фотошопе =)","description":"","created":"1203516081","updated":"1203516728","size":4}]} 
[4] Done     curl -s https://api.vk.com/method/photos.getAlbums?uid=6015870 
Narnia:~ vitaly$ 

Dlaczego otrzymuję komunikat "Nie można zdekodować obiektu JSON"? Url Żądam zawsze zwraca ważny json. Jeśli przekazuję json z odpowiedzi ręcznie, jak $ echo jsonreponse | python -m json.tool, upiększa json.

Czy robię coś nie tak?

+0

jakie jest wyjście z "curl -s myurl" –

+0

Nie można odtworzyć, nie używając 'curl -s https://api.github.com/ | python -m json.tool' co najmniej. Testowany w Pythonie w wersjach od 2.6 do 3.3 w systemie Mac OS X 10.7 –

+0

Tak, json z Git wygląda dobrze. Uaktualniłem pełny adres URL – Madman

Odpowiedz

13

Musisz umieścić w cudzysłowie URL:

curl -s "https://api.vk.com/method/photos.getAlbums?uid=6015870&access_token=0275127e915981fe795840165e532169482cbdfc4ca1dbd48619a687a65fead88c468cdafe9743e231c37" | python -m json.tool 

& postać jest powłoka meta znak, że umieszcza polecenie w tle. W związku z tym nie przekazujesz pełnego adresu URL do serwera, ale zamiast tego wstaw komendę curl -s https://api.vk.com/method/photos.getAlbums?uid=6015870.

Dlatego echa powłoki [4] 8822 dla Ciebie; umieścić czwarty pracę tak daleko w kolejce Jobs, dano PID 8822.

Pozostałe polecenia jest wtedy:

access_token=0275127e915981fe795840165e532169482cbdfc4ca1dbd48619a687a65fead88c468cdafe9743e231c37 | python -m json.tool 

który nie przyniesie ważne JSON rzeczywiście:

$ access_token=0275127e915981fe795840165e532169482cbdfc4ca1dbd48619a687a65fead88c468cdafe9743e231c37 | python -m json.tool 
No JSON object could be decoded 

Widać pracę należy umieścić na tle zakończona w następnym wierszu:

Narnia:~ vitaly$ {"response":[{"aid":"109967643","thumb_id":"163950716","owner_id":"6015870","title":"9 мая 2010","description":"","created":"1273613868","updated":"1273695901","size":7},{"aid":"95299056","thumb_id":"135702541","owner_id":"6015870","title":"Kemer 2009","description":"http:\/\/picasaweb.google.com.ua\/Ivanov.Vitalii\/Kemer2009","created":"1250355164","updated":"1250520619","size":72},{"aid":"43368938","thumb_id":"116630327","owner_id":"6015870","title":"Лето 2008 (Алупка)","description":"","created":"1220478168","updated":"1221348162","size":43},{"aid":"38630587","thumb_id":"116886016","owner_id":"6015870","title":"Flowers","description":"","created":"1217680400","updated":"1236774230","size":9},{"aid":"36658103","thumb_id":"163954451","owner_id":"6015870","title":"Моя ката","description":"","created":"1216419744","updated":"1273698620","size":8},{"aid":"23100962","thumb_id":"112723283","owner_id":"6015870","title":"Только пипл","description":"","created":"1208636545","updated":"1210382181","size":9},{"aid":"15473894","thumb_id":"114370266","owner_id":"6015870","title":"other","description":"","created":"1203516879","updated":"1327679223","size":29},{"aid":"15471241","thumb_id":"95266020","owner_id":"6015870","title":"Сам батя или чего нельзя в фотошопе =)","description":"","created":"1203516081","updated":"1203516728","size":4}]} 
[4] Done     curl -s https://api.vk.com/method/photos.getAlbums?uid=6015870 

Z cudzysłowów polecenie produkuje:

$ curl -s "https://api.vk.com/method/photos.getAlbums?uid=6015870&access_token=0275127e915981fe795840165e532169482cbdfc4ca1dbd48619a687a65fead88c468cdafe9743e231c37" | python -m json.tool 
{ 
    "error": { 
     "error_code": 5, 
     "error_msg": "User authorization failed: access_token was given to another ip address.", 
     "request_params": [ 
      { 
       "key": "oauth", 
       "value": "1" 
      }, 
      { 
       "key": "method", 
       "value": "photos.getAlbums" 
      }, 
      { 
       "key": "uid", 
       "value": "6015870" 
      }, 
      { 
       "key": "access_token", 
       "value": "0275127e915981fe795840165e532169482cbdfc4ca1dbd48619a687a65fead88c468cdafe9743e231c37" 
      } 
     ] 
    } 
} 

Przypuszczalnie dla was będzie ona produkować więcej przydatnych informacji, jak wyraźnie nie mam odpowiedniego znacznika dostępu do mojego adresu IP. :-)

+1

To jest świetne (+1), ale nie mogę nie wspomnieć o świetnym narzędziu zwanym [httPER'] (https://github.com/jkbr/httpie), został zaprojektowany, aby tego rodzaju zadanie było bardzo łatwe. –

+0

@BurhanKhalid: Ale aby * wywołać * 'httpie' z wiersza poleceń, nadal musisz podać adres URL .. –

+0

Tak, ale przynajmniej reszta jest pod opieką :) –

5

Podaj swój adres URL. Ten jeden jest uszkodzony:

curl https://api.github.com/repos/mojombo/jekyll/issues?state=closed&assignee=mojombo | python -mjson.tool 

ten jest poprawna:

curl 'https://api.github.com/repos/mojombo/jekyll/issues?state=closed&assignee=mojombo' | python -mjson.tool 
+0

Dzięki, działa idealnie! Awans, ale oznaczona bardziej opisową odpowiedzią ... – Madman