У меня есть содержимое Json, подобное этому
{"expand": "names,schema","startAt": 0,"maxResults": 50,"total": 1,"issues": [{"expand": "operations,versionedRepresentations,editmeta,changelog,renderedFields","id": "641955","self": "https://rb-tracker.bosch.com/tracker19/rest/api/latest/issue/641955","key": "EDATOOL-1411","fields": {"created": "2022-12-06T11:14:36.000+0100","customfield_10000": "{summaryBean=com.atlassian.jira.plugin.devstatus.rest.SummaryBean@24a1688f[summary = {pullrequest=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@23f2f23c[overall=PullRequestOverallBean{stateCount=0, state='OPEN', details=PullRequestOverallDetails{openCount=0, mergedCount=0, declinedCount=0}},byInstanceType = {}], build=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@321de5ab[overall=com.atlassian.jira.plugin.devstatus.summary.beans.BuildOverallBean@6ca82c6[failedBuildCount=0,successfulBuildCount=0,unknownBuildCount=0,count=0,lastUpdated=<null>,lastUpdatedTimestamp=<null>],byInstanceType = {}], review=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@5fc3e1e6[overall=com.atlassian.jira.plugin.devstatus.summary.beans.ReviewsOverallBean@7a2d42e3[stateCount=0,state=<null>,dueDate=<null>,overDue=false,count=0,lastUpdated=<null>,lastUpdatedTimestamp=<null>],byInstanceType = {}], deployment-environment=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@2740d0b0[overall=com.atlassian.jira.plugin.devstatus.summary.beans.DeploymentOverallBean@75ceaa2c[topEnvironments=[],showProjects=false,successfulCount=0,count=0,lastUpdated=<null>,lastUpdatedTimestamp=<null>],byInstanceType = {}], repository=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@35c2a9a2[overall=com.atlassian.jira.plugin.devstatus.summary.beans.CommitOverallBean@2568cfa3[count=0,lastUpdated=<null>,lastUpdatedTimestamp=<null>],byInstanceType = {}], branch=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@40c4eee[overall=com.atlassian.jira.plugin.devstatus.summary.beans.BranchOverallBean@4131b89[count=0,lastUpdated=<null>,lastUpdatedTimestamp=<null>],byInstanceType = {}]},errors=[],configErrors=[]], devSummaryJson = {\"cachedValue\":{\"errors\":[],\"configErrors\":[],\"summary\":{\"pullrequest\":{\"overall\":{\"count\":0,\"lastUpdated\":null,\"stateCount\":0,\"state\":\"OPEN\",\"details\":{\"openCount\":0,\"mergedCount\":0,\"declinedCount\":0,\"total\":0},\"open\":true},\"byInstanceType\":{}},\"build\":{\"overall\":{\"count\":0,\"lastUpdated\":null,\"failedBuildCount\":0,\"successfulBuildCount\":0,\"unknownBuildCount\":0},\"byInstanceType\":{}},\"review\":{\"overall\":{\"count\":0,\"lastUpdated\":null,\"stateCount\":0,\"state\":null,\"dueDate\":null,\"overDue\":false,\"completed\":false},\"byInstanceType\":{}},\"deployment-environment\":{\"overall\":{\"count\":0,\"lastUpdated\":null,\"topEnvironments\":[],\"showProjects\":false,\"successfulCount\":0},\"byInstanceType\":{}},\"repository\":{\"overall\":{\"count\":0,\"lastUpdated\":null},\"byInstanceType\":{}},\"branch\":{\"overall\":{\"count\":0,\"lastUpdated\":null},\"byInstanceType\":{}}}},\"isStale\":true}}"}}]}
Итак, я хочу использовать Regex для получения содержимого внутри блока devSummaryJson = {}.
Я пробовал с devSummaryJson = {.*, но он возвращает несколько дополнительных символов
devSummaryJson = {\"cachedValue\":{\"errors\":[],\"configErrors\":[],\"summary\":{\"pullrequest\":{\"overall\":{\"count\":1,\"lastUpdated\":\"2022-12-19T09:09:46.366+0100\",\"stateCount\":1,\"state\":\"MERGED\",\"details\":{\"openCount\":0,\"mergedCount\":1,\"declinedCount\":2,\"total\":3},\"open\":false},\"byInstanceType\":{\"stash\":{\"count\":1,\"name\":\"Bitbucket Server\"}}},\"build\":{\"overall\":{\"count\":0,\"lastUpdated\":null,\"failedBuildCount\":0,\"successfulBuildCount\":0,\"unknownBuildCount\":0},\"byInstanceType\":{}},\"review\":{\"overall\":{\"count\":0,\"lastUpdated\":null,\"stateCount\":0,\"state\":null,\"dueDate\":null,\"overDue\":false,\"completed\":false},\"byInstanceType\":{}},\"deployment-environment\":{\"overall\":{\"count\":0,\"lastUpdated\":null,\"topEnvironments\":[],\"showProjects\":false,\"successfulCount\":0},\"byInstanceType\":{}},\"repository\":{\"overall\":{\"count\":1,\"lastUpdated\":\"2022-12-19T09:09:46.000+0100\"},\"byInstanceType\":{\"stash\":{\"count\":1,\"name\":\"Bitbucket Server\"}}},\"branch\":{\"overall\":{\"count\":0,\"lastUpdated\":null},\"byInstanceType\":{}}}},\"isStale\":false}}"}}]}.
Так есть ли способ решить эту проблему? (Удаление ровно трех определенных символов в конце не является предпочтительным, поскольку в будущем может измениться формат json)
Большое спасибо.
Привет @Buttered_Toast, из-за строкового значения внутри customfield_10000
такое сложное, и я не знаю, как с этим справиться, чтобы получить содержимое внутри devSummaryJson
Самое простое регулярное выражение: "devSummaryJson = {.*(?=}]})"gm
(?=}]})
— позитивный прогноз. Он ищет все до трех определенных символов }]}
.devSummaryJson = {.*
позиция, с которой начинается поиск.В любом случае, регулярное выражение неприменимо для такого типа проблем, и лучшим решением будет использование синтаксического анализатора json.
'regex' - неправильный инструмент для решения этой проблемы. Используйте json-модуль python для анализа json-документа. Подсказка `json.loads(данные)'
Привет всем, не могли бы вы показать мне пример, как анализировать этот json с кодом Python, чтобы получить контент внутри devSummaryJson
.
@NguyễnTriMẫn, пожалуйста, изучите этот ответ, пожалуйста, изучите этот ответ stackoverflow.com/a/7771071/20666497. Или погуглите аналогичный вопрос.
Спасибо за вашу поддержку. Я нашел решение по вашему предложению.
Во-первых: парсить json в строку
Второе: используйте регулярное выражение для получения контента devSummaryJson
Я попробую с groovy и опубликую здесь, если кому-то понадобится.
P/S: Добавьте отличный код для получения контента парсером Json и Regex.
--> Результат
Почему бы не использовать анализатор json для строки json. затем json снова анализирует свойство, которое содержит строку json?