样式化JSON页面

时间:2012-03-22 17:25:00

标签: html css json api

我正在研究JSON API,我想做类似Facebook的opengraph样式。 opengraph风格缩进和折断线,你怎么做呢?如果您通过HTML或CSS使用样式,则无法加载JSON。

2 个答案:

答案 0 :(得分:3)

您可以使用JSON_PRETTY_PRINT中新增的PHP 5.4

<?php 

// Facebook sends a Content-Type of text/javascript
// So I assume you want to too, but you may prefer
// application/json
header('Content-Type: text/javascript');

echo json_encode($data, JSON_PRETTY_PRINT);

?>

如果您没有,或者无法升级到5.4版,那么您必须找到服务器端解析器的某一面。

修改

我不知道为什么我假设你没有标记它时使用PHP。无论您使用哪种服务器端语言,您都希望发送非HTML内容类型,并使用新的行和标签来打印它,而不是HTML。

答案 1 :(得分:3)

facebook似乎正在使用浏览器检测来格式化服务器上​​的JSON。

对于wget,不应用格式:

> wget -q -S -O - http://graph.facebook.com/4
  HTTP/1.1 200 OK
  Access-Control-Allow-Origin: *
  Cache-Control: private, no-cache, no-store, must-revalidate
  Content-Type: text/javascript; charset=UTF-8
  ETag: "539feb8aee5c3d20a2ebacd02db380b27243b255"
  Expires: Sat, 01 Jan 2000 00:00:00 GMT
  P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"
  Pragma: no-cache
  X-FB-Rev: 526949
  Set-Cookie: datr=imJrT4lrhBZ48Mrtw4uYfByk; expires=Sat, 22-Mar-2014 17:34:02 GMT; path=/; domain=.facebook.com; httponly
  X-FB-Debug: +gpBLnliDoRvuNtlHIwHASwsDz4pJm9TP3btrrw6AsE=
  X-Cnection: close
  Date: Thu, 22 Mar 2012 17:34:02 GMT
  Content-Length: 172
{"id":"4","name":"Mark Zuckerberg","first_name":"Mark","last_name":"Zuckerberg","link":"http:\/\/www.facebook.com\/zuck","username":"zuck","gender":"male","locale":"en_US"}

但是对于谷歌浏览器,wireshark会显示使用空格和换行符格式化的文本:

{
   "id": "4",
   "name": "Mark Zuckerberg",
   "first_name": "Mark",
   "last_name": "Zuckerberg",
   "link": "http://www.facebook.com/zuck",
   "username": "zuck",
   "gender": "male",
   "locale": "en_US"
}

(它确实是不同的数据 - 在这种情况下,Content-Length是210)。请注意,Content-Type仍然是text / javascript - 它们不会呈现为HTML。

所以你需要为你正在使用的任何语言使用JSON格式化程序(我猜你已经在使用库了,所以检查它是否有“prettyprint”选项或类似)。另外,如果你想在格式似乎不重要时节省带宽,浏览器(以及一般上下文 - 请参阅Paul的评论)从请求标题中检测到。