2013-03-24 33 views
8

Tôi đang cố gắng để prettify phản ứng JSON từ curl, nhưng nó không hoạt động.Tạo JSON từ curl trong 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$ 

Tại sao tôi nhận được "Không có đối tượng JSON nào có thể được giải mã"? Url Tôi yêu cầu luôn trả về json hợp lệ. Nếu tôi chuyển json từ phản hồi theo cách thủ công như $ echo jsonreponse | python -m json.tool, nó làm prsonify json.

Tôi có làm gì sai không?

+0

đầu ra từ 'curl -s myurl' –

+0

Không thể sao chép, không phải với 'curl -s https://api.github.com/ | python -m json.tool' ít nhất. Thử nghiệm với các phiên bản Python 2.6 đến 3.3 trên Mac OS X 10.7 –

+0

Có, json từ git có vẻ tốt. Tôi cập nhật với đầy đủ url – Madman

Trả lời

13

Bạn cần phải đặt dấu ngoặc kép quanh URL của bạn:

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

Nhân vật & là một nhân vật meta vỏ, nó đặt lệnh trong nền. Kết quả là bạn không chuyển URL đầy đủ đến máy chủ nhưng thay vào đó, hãy đặt lệnh curl -s https://api.vk.com/method/photos.getAlbums?uid=6015870 ở chế độ nền.

Đây là lý do tại sao trình bao hệ vỏ là [4] 8822 đối với bạn; bạn đặt một công việc thứ tư cho đến nay vào hàng đợi công việc, nó được trao PID 8822.

Lệnh còn lại là sau đó:

access_token=0275127e915981fe795840165e532169482cbdfc4ca1dbd48619a687a65fead88c468cdafe9743e231c37 | python -m json.tool 

đó sẽ không tạo ra giá trị thực sự JSON:

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

Bạn có thể xem công việc bạn đưa vào nền hoàn thành trên dòng tiếp theo:

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 

Với có dấu ngoặc kép lệnh sản xuất:

$ 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" 
      } 
     ] 
    } 
} 

Có lẽ đối với bạn nó sẽ tạo ra các thông tin hữu ích hơn một cách rõ ràng tôi không có thẻ truy cập phù hợp với địa chỉ IP của tôi. :-)

+1

Điều này thật tuyệt (+1), nhưng tôi không thể không đề cập đến một công cụ tuyệt vời được gọi là ['httpie'] (https://github.com/jkbr/httpie) mà được thiết kế để thực hiện nhiệm vụ này rất dễ dàng. –

+0

@BurhanKhalid: Nhưng để * gọi * 'httpie' từ dòng lệnh bạn vẫn cần phải trích dẫn URL .. –

+0

Có nhưng ít nhất phần còn lại của nó được đưa về chăm sóc :) –

5

Trích dẫn URL của bạn. Cái này bị phá vỡ:

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

này là đúng:

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

Cảm ơn, hoạt động hoàn hảo! Upvote, nhưng đánh dấu câu trả lời mô tả hơn ... – Madman