Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的Google People API给出错误:接收到无效的JSON负载。“未知名称”&引用;:根元素必须是消息;_Python_Json_Google Api_Google People - Fatal编程技术网

python中的Google People API给出错误:接收到无效的JSON负载。“未知名称”&引用;:根元素必须是消息;

python中的Google People API给出错误:接收到无效的JSON负载。“未知名称”&引用;:根元素必须是消息;,python,json,google-api,google-people,Python,Json,Google Api,Google People,我正在尝试使用People API更新Google联系人。不幸的是,我得到了一个错误: 接收到无效的JSON负载。未知名称“”:根元素必须是消息。 当执行请求时。有人知道我该怎么解决吗?JSON本身似乎还可以,因为我曾经对它进行过测试,得到了200个响应,联系人也被修改了 from\uuuuu future\uuuuu导入打印功能 进口泡菜 导入操作系统路径 从GoogleAppClient.discovery导入生成 从google_auth_oauthlib.flow导入安装的应用程序流 从

我正在尝试使用People API更新Google联系人。不幸的是,我得到了一个错误:

接收到无效的JSON负载。未知名称“”:根元素必须是消息。

当执行请求时。有人知道我该怎么解决吗?JSON本身似乎还可以,因为我曾经对它进行过测试,得到了200个响应,联系人也被修改了

from\uuuuu future\uuuuu导入打印功能
进口泡菜
导入操作系统路径
从GoogleAppClient.discovery导入生成
从google_auth_oauthlib.flow导入安装的应用程序流
从google.auth.transport.requests导入请求
#如果修改这些作用域,请删除文件token.pickle。
作用域=['https://www.googleapis.com/auth/contacts']
def modifyContact(服务、资源名称、JSON):
打印(JSON)
service.people()
def buildJSON(电话号码,etag):
JSON=“”
对于范围(0,len(电话号码))中的x:
如果电话号码[x].get('type')='mobile':
如果电话号码[x].get('value').find('+48')!=-1:
oldNUmber=PhoneNumber[x]。获取('value'))
newNumber=phoneNumbers[x]。获取('value')[3:]
JSON+=“””
{
“类型”:“移动”,
“值”:“%s”
},
{
“类型”:“移动”,
“值”:“%s”
},
“”%(旧编号,新编号)
其他:
JSON+=“””
{
“类型”:“移动”,
“值”:“%s”
},
“%”(电话号码[x]。获取('value'))
其他:
JSON+=“””
{
“类型”:“%s”,
“值”:“%s”
},
“%”(电话号码[x]。获取('type'),电话号码[x]。获取('value'))
#删除最后一个空格+超过逗号的字符
JSON=JSON.rstrip()[:-1]
JSON=”“”
“电话号码”:[
%
],
“etag”:“%s”
“”“%(JSON,etag)
#打印(JSON)
返回JSON
def main():
信誉=无
#文件token.pickle存储用户的访问和刷新令牌,并且
#在第一次完成授权流时自动创建
#时间。
如果os.path.exists('token.pickle'):
以open('token.pickle','rb')作为令牌:
creds=pickle.load(令牌)
#如果没有可用的(有效)凭据,请让用户登录。
如果没有信用或信用无效:
如果creds和creds.expired和creds.refresh\u令牌:
creds.refresh(请求())
其他:
flow=InstalledAppFlow.from_client_secrets_文件(
“credentials.json”,作用域)
creds=flow.运行本地服务器(端口=0)
#保存下一次运行的凭据
以open('token.pickle','wb')作为令牌:
pickle.dump(信用卡、代币)
服务=构建('people','v1',凭证=凭证)
#调用People API
打印('列出10个连接名称')
结果=service.people().connections().list(
resourceName='people/me',
pageSize=1000,
personFields='names,phoneNumbers').execute()
connections=results.get('connections',[])
有关人士:
names=person.get('names',[])
phoneNumbers=person.get('phoneNumbers',[])
如果名称:
name=名称[0]。获取('givenName'))
如果名称==“testAPI”:
印刷品(名称)
打印(person.get('etag'))
打印(person.get('resourceName'))
如果电话号码:
JSON=buildJSON(电话号码,person.get('etag'))
modifyContact(服务,person.get('resourceName'),JSON)
#打印(电话号码[x]。获取('value'))
印刷品(人)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
问题已解决

首先,当我进行故障排除时,我已经从JSON字符串中删除了起始/结束括号

应该是:

JSON = """{
          "phoneNumbers": [
            %s
          ],
          "etag": "%s"
      }
    """ % (JSON, etag)
其次,我必须用loads()反序列化JSON字符串

现在它就像一个符咒:)

问题解决了

首先,当我进行故障排除时,我已经从JSON字符串中删除了起始/结束括号

应该是:

JSON = """{
          "phoneNumbers": [
            %s
          ],
          "etag": "%s"
      }
    """ % (JSON, etag)
其次,我必须用loads()反序列化JSON字符串


现在它像一个符咒一样工作:)

错误发生在哪里?问题已解决,请查看下面的答案。感谢您的回复。我很高兴你的问题解决了。非常抱歉,我帮不上忙。错误发生在哪里?问题已解决,请查看下面的答案。谢谢您的回复。我很高兴你的问题解决了。我很抱歉我帮不上忙。我不明白为什么,但它起作用了!!非常感谢。你知道它为什么有用吗?我不明白为什么,但它有用!!非常感谢。你知道它为什么会起作用吗?