将参数传递给函数内的字符串 json

简体中文

如果我运行这样的发布请求,它会起作用:

def myFunction():
  contentTypeHeader = {
    'Content-type': 'application/json',
  }
 
  data = """
  {
  "target": {
    "ref_type": "branch",
    "type": "pipeline_ref_target",
    "ref_name": "master",
  "selector": {
    "type": "custom",
    "pattern" : "mypipeline"
    }
  },
  "variables": []
  }
  """

  http = urllib3.PoolManager()
  headers = urllib3.make_headers(basic_auth='{}:{}'.format("username", "password"))
  headers = dict(list(contentTypeHeader .items()) + list(headers.items()))
  try:
    resp = http.urlopen('POST', 'https://api.bitbucket.org/2.0/repositories/owner/slugg/pipelines/', headers=headers, body=data)
    print('Response', str(resp.data))
  except Exception as e:
    print('Error', e)


myFunction()

但是,如果不是对值进行硬编码,而是尝试将它们作为函数传递:

def myFunction(bitbucket_branch, pipeline_name):
  contentTypeHeader = {
    'Content-type': 'application/json',
  }
  
  data = """
  {
  "target": {
    "ref_type": "branch",
    "type": "pipeline_ref_target",
    "ref_name": "${bitbucket_branch}",
  "selector": {
    "type": "custom",
    "pattern" : "${pipeline_name}"
    }
  },
  "variables": []
  }
  """
...


 myFunction("master","mypipeline")

我收到此错误:

Response b'{"error": {"message": "Not found", "detail": "Could not find last reference for branch ${bitbucket_branch}", "data": {"key": "result-service.pipeline.reference-not-found", "arguments": {"uuid": "${bitbucket_branch}"}}}}'

此外,在我的功能中:

def myFunction(bitbucket_branch, pipeline_name):

在我的 VSCode 中,参数仍然是浅色的,这表明参数实际上并没有在函数中使用。

也许我在编码字符串时做错了,但无法弄清楚到底是什么。

马茨林德

Python 不会${pipeline_name}为您扩展字符串内部;这是 Javascript 模板字符串的一个特性(并且不是 JSON 的一部分)——所以除非你运行实际的 Javascript,否则这是行不通的。

但是,python 有 f-strings,它的作用相同:

def myFunction(bitbucket_branch, pipeline_name):
  contentTypeHeader = {
    'Content-type': 'application/json',
  }

  # notice the added f and removal of $
  data = f"""    
  {
  "target": {
    "ref_type": "branch",
    "type": "pipeline_ref_target",
    "ref_name": "{bitbucket_branch}",
  "selector": {
    "type": "custom",
    "pattern" : "{pipeline_name}"
    }
  },
  "variables": []
  }
  """

这将用{}变量中的值替换字符串中的内容。我还想提一下,您可能希望将其声明为 Python 结构并用于json.dumps将其转换为 JSON。这样,您就可以在 Python 中做任何您习惯的事情,而不是使用 JSON 模板并替换该模板中的值(如果这些值中的任何一个包含",在这种情况下,您最终会生成无效的 JSON)。

import json

def myFunction(bitbucket_branch, pipeline_name):
  data = {
    "target": {
      "ref_type": "branch",
      "type": "pipeline_ref_target",
      "ref_name": bitbucket_branch,
      "selector": {
        "type": "custom",
        "pattern" : pipeline_name
        }
      },
      "variables": []
    }
  }

  return json.dumps(data)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将json字符串作为参数传递给ng-click

将JSON参数作为字符串传递给python hadoop流应用程序

如何将JSON字符串作为查询参数传递给API Gateway

将JSON参数(不是简单的字符串)传递给jq

如何将 JSON 字符串作为请求参数传递给其他服务

HTML脚本将字符串作为字符串传递给Json并传递给Java

无法在函数参数中传递 JSON/JSON 字符串

Powershell:将json字符串传递给curl

将JSON字符串传递给JavaScript

如何将json字符串传递给对象?

将JSON字符串作为输入传递给带有Selenium的RESTAssured中POST请求正文的参数之一

将JSON字符串转换为函数参数

如果将字符串作为text / json传递,将传递给Java servlet响应的什么?

如何将JSON字符串从Controller动作传递到View并作为JQuery函数的参数加载

将JSON字符串作为输入传递给AWS命令

AJAX 将 JSON 作为字符串传递给控制器返回 Null

如何将整个JSON字符串传递给Helm图表值?

将JSON字符串作为值传递给Spring数据REST端点

Android:将JSON字符串传递给服务类“ PostData”

如何将json字符串传递给webmethod C#ASP.NET

JSON将字符串而不是数组或对象从PHP传递给Javascript

Ansible-将环境中的JSON字符串传递给Shell模块

如何将字符串数组传递给json格式的请求正文[put request]

将JSON而不是字符串传递给Dynamics CRM SharedVariable

如何使用json将编码的音频字符串传递给字节?

将具有动态数据的json字符串传递给primeNG数据表

将数据json字符串传递给数字Vue.js

如何使用RESTSharp将JSON字符串传递给另一个API?

使用JQuery和Ajax将JSON字符串传递给django