为什么Google会while(1);在其(私人)JSON响应前加上?
例如,这是在Google日历中打开和关闭日历时的响应:
while(1);[['u',[['smsSentFlag','false'],['hideInvitations','false'],
  ['remindOnRespondedEventsOnly','true'],
  ['hideInvitations_remindOnRespondedEventsOnly','false_true'],
  ['Calendar ID stripped for privacy','false'],['smsVerifiedFlag','true']]]]
我认为这是为了防止人们eval()对它进行操作,但你真正需要做的就是更换while然后你就可以了.我认为eval预防是为了确保人们编写安全的JSON解析代码.
我已经在其他几个地方看到了这种情况,但谷歌(邮件,日历,通讯录等)的情况更是如此.奇怪的是,谷歌文档开始了&&&START&&&,谷歌联系人似乎开始while(1); &&&START&&&.
这里发生了什么?
我理解JSON,但不了解JSONP.维基百科关于JSON的文档是JSONP的最佳搜索结果.它说:
JSONP或"带填充的JSON"是JSON扩展,其中前缀被指定为调用本身的输入参数.
咦?什么电话?这对我没有任何意义.JSON是一种数据格式.没有电话.
JSONP是脚本标记注入,将响应从服务器传递到用户指定的函数.
我可以理解这一点,但它仍然没有任何意义.
那么什么是JSONP?它为什么被创建(它解决了什么问题)?为什么我会用它?
附录:我刚刚在维基百科上为JSONP创建了一个新页面 ; 根据jvenema的回答,它现在对JSONP进行了清晰而全面的描述.
如何将a的str表示形式(dict如下面的字符串)转换为dict?
s = "{'muffin' : 'lolz', 'foo' : 'kitty'}"
我不喜欢用eval.我还能用什么?
这样做的主要原因是我写的一个同事课程,将所有输入转换为字符串.我没心情去修改他的课程来处理这个问题.
我想知道最简单的方法是将string如下列表转换为list:
x = u'[ "A","B","C" , " D"]'
即使用户在逗号和引号内的空格之间放置空格也是如此.我需要处理它:
x = ["A", "B", "C", "D"] 
在Python中.
我知道我可以剥夺的空间与strip()和split()使用拆分操作和检查非字母.但是代码变得非常糟糕.有一个我不知道的快速功能吗?
我对Python中的JSON有点困惑.对我来说,它看起来像是一本字典,因此我试图这样做:
{
    "glossary":
    {
        "title": "example glossary",
        "GlossDiv":
        {
            "title": "S",
            "GlossList":
            {
                "GlossEntry":
                {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef":
                    {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}
但是当我打印dict(json)时,它会出错.
如何将此字符串转换为结构,然后调用json ["title"]以获取"示例词汇表"?
我见过很多项目使用simplejson模块而不是json标准库中的模块.此外,还有许多不同的simplejson模块.为什么要使用这些替代品,而不是标准库中的替代品?
我有点头疼,因为一个简单的外观,简单的陈述在我脸上抛出一些错误.
我有一个名为strings.json的json文件,如下所示:
"strings": [{"-name": "city", "#text": "City"}, {"-name": "phone", "#text": "Phone"}, ...,
            {"-name": "address", "#text": "Address"}]
我现在想读取json文件.我发现了这些陈述,但它不起作用:
import json
from pprint import pprint
with open('strings.json') as json_data:
    d = json.load(json_data)
    json_data.close()
    pprint(d)
控制台上显示的错误是:
Traceback (most recent call last):
File "/home/.../android/values/manipulate_json.py", line 5, in <module>
d = json.loads(json_data)
File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer
[Finished in 0.1s with exit code 1]
编辑 …
我想通过Google Directions API动态查询Google地图.例如,此请求通过乔普林,密苏里州和俄克拉荷马城的两个航路点计算从伊利诺伊州芝加哥到洛杉矶的路线,OK:
它以JSON格式返回结果.
我怎么能用Python做到这一点?我想发送这样的请求,接收结果并解析它.
在Python中我收到一个错误:
Exception:  (<type 'exceptions.AttributeError'>,
AttributeError("'str' object has no attribute 'read'",), <traceback object at 0x1543ab8>)
给出python代码:
def getEntries (self, sub):
    url = 'http://www.reddit.com/'
    if (sub != ''):
        url += 'r/' + sub
    request = urllib2.Request (url + 
        '.json', None, {'User-Agent' : 'Reddit desktop client by /user/RobinJ1995/'})
    response = urllib2.urlopen (request)
    jsonofabitch = response.read ()
    return json.load (jsonofabitch)['data']['children']
这个错误意味着什么,我做了什么导致它?
在并行Python中,它在提交函数中有一些叫做回调(文档)的东西,但它似乎没有解释得太好.我几天前在他们的论坛上发帖,我没有收到回复.有人会解释回调是什么以及它用于什么?
谢谢.
python ×8
json ×6
string ×3
javascript ×2
ajax ×1
callback ×1
dictionary ×1
jsonp ×1
python-2.7 ×1
security ×1
simplejson ×1
terminology ×1
urllib2 ×1