有什么方法可以使用Python修改JSON吗?

时间:2019-07-19 11:24:20

标签: python json

我正在尝试使用Python修改JSON,但无法正确执行。

我已经尝试使用默认情况下Python附带的模块来处理JSON,但我无法执行下一步。

要修改的JSON是这样的:

{
    "uuid":"789ce6ed-ec0f-418b-8fad-6ba64cb8bd70",
    "assetTemplate":[
        {
            "id":14,
            "name":"Template-conectividad"
        },
        {
            "id":54,
            "name":"Template-discos-agata"
        },
        {
            "id":17,
            "name":"Template-servidor-linux"
        }
    ],
    "info":null
}

它应该看起来像这样:

{
    "uuid":"789ce6ed-ec0f-418b-8fad-6ba64cb8bd70",
    "assetTemplate":[
        {
            "id":54,
            "name":"Template-discos-agata"
        },
        {
            "id":17,
            "name":"Template-servidor-linux"
        },
        {
            "id":85,
            "name":"Template-conectividad-test"
        }
    ],
    "info":null
}

这是我尝试删除的部分,但我有插入新数据的部分:

#!/usr/bin/python

import json

# We load JSON to modify

x = '{"uuid":"789ce6ed-ec0f-418b-8fad-6ba64cb8bd70","assetTemplate":[{"id":14,"name":"Template-conectividad"},{"id":54,"name":"Template-discos-agata"},{"id":17,"name":"Template-servidor-linux"}],"info":null}'

y = json.loads(x)

obj = y["assetTemplate"]

# We remove the object that we dont want

for i in range(len(obj)):
    if obj[i]['id'] == 14:
        del obj[i]
        break

print(obj)

# We make output of what has been achieved

x = json.dumps(y)

print(x)

1 个答案:

答案 0 :(得分:0)

加载json时,其内容将作为字典(require('shiny') require('ggplot2') require('DT') require('shinyjs') library('shinyBS') ui <- pageWithSidebar( headerPanel("Hover off the page"), sidebarPanel(width = 2, sliderInput(inputId = 'NrOfPlots', label = 'Nr of Plots', min = 1, max = 20, value = 1), verbatimTextOutput('leftPix'), verbatimTextOutput('topPix') ), mainPanel( shinyjs::useShinyjs(), tags$head( tags$style(' #my_tooltip { position: absolute; pointer-events:none; width: 10; z-index: 100; padding: 0; font-size:10px; line-height:0.6em } ') ), uiOutput('FP1PlotMultiplot'), uiOutput('my_tooltip'), style = 'width:1250px' ) ) server <- function(input, output, session) { observe({ lapply(1:input$NrOfPlots, function(i) { output[[paste0('FP1Plot_', i)]] <- renderPlot({ ggplot(mtcars, aes(wt, mpg, color = as.factor(cyl))) + geom_point() + theme(legend.position = "none") }) }) }) output$FP1PlotMultiplot<- renderUI({ n <- input$NrOfPlots n_cols <- if(n == 1) { 1 } else if (n %in% c(2,4)) { 2 } else if (n %in% c(3,5,6,9)) { 3 } else { 4 } Pwidth <- 1000/n_cols Pheight <- 450/ceiling(n/n_cols) # calculate number of rows Pwidth2 <- Pwidth+40 Pheight2 <- Pheight+80 plot_output_list <- list() for(i in 1:input$NrOfPlots) { plot_output_list <- append(plot_output_list,list( div(id = paste0('div', 'FP1Plot_', i), wellPanel( plotOutput(paste0('FP1Plot_', i), width = Pwidth, height = Pheight, hover = hoverOpts(id = paste('FP1Plot', i, "hover", sep = '_'), delay = 0) ), style = paste('border-color:#339fff; border-width:2px; background-color: #fff; width:', Pwidth2, 'px; height:', Pheight2, 'px', sep = '')), style = paste('display: inline-block; margin: 2px; width:', Pwidth2, 'px; height:', Pheight2, 'px', sep = '')) )) } do.call(tagList, plot_output_list) }) # turn the hovers into 1 single reactive containing the needed information hoverReact <- reactive({ eg <- expand.grid(c('FP1Plot'), 1:input$NrOfPlots) plotids <- sprintf('%s_%s', eg[,1], eg[,2]) names(plotids) <- plotids hovers <- lapply(plotids, function(key) input[[paste0(key, '_hover')]]) notNull <- sapply(hovers, Negate(is.null)) if(any(notNull)){ plotid <- names(which(notNull)) plothoverid <- paste0(plotid, "_hover") hover <- input[[plothoverid]] if(is.null(hover)) return(NULL) hover } }) ## debounce the reaction to calm down shiny hoverReact_D <- hoverReact %>% debounce(100) ## attempt to stop hoverData <- reactive({}) from firing too often, which is needed when you have 10k point scatter plots..... hoverData <- reactive({ hover <- hoverReact_D() if(is.null(hover)) return(NULL) ## in my multi plot multi data frame I look up which dataframe to grab based on hover$plot_id as well as which x and y parameter are plotted hoverDF <- nearPoints(mtcars, coordinfo = hover, threshold = 15, maxpoints = 1, xvar = 'wt', yvar = 'mpg') hoverDF }) hoverPos <- reactive({ ## here I look up the position information of the hover whenevver hoverReact_D and hoverData change hover <- hoverReact_D() hoverDF <- hoverData() if(is.null(hover)) return(NULL) if(nrow(hoverDF) == 0) return(NULL) ## in my real app the data is already X <- hoverDF$wt[1] Y <- hoverDF$mpg[1] left_pct <- (X - hover$domain$left) / (hover$domain$right - hover$domain$left) top_pct <- (hover$domain$top - Y) / (hover$domain$top - hover$domain$bottom) left_px <- (hover$range$left + left_pct * (hover$range$right - hover$range$left)) / hover$img_css_ratio$x top_px <- (hover$range$top + top_pct * (hover$range$bottom - hover$range$top)) / hover$img_css_ratio$y list(top = top_px, left = left_px) }) observeEvent(hoverPos(), { req(hoverPos()) hover <- hoverPos() if(is.null(hover)) return(NULL) runjs(paste0( "$('[id=FP1PlotMultiplot]').off('mousemove.x').on('mousemove.x', function(e) {", " $('#my_tooltip').show();", " var tooltip = document.getElementById('my_tooltip');", " var rect = tooltip.getBoundingClientRect();", " var FrameID = document.getElementById('FP1PlotMultiplot');", " var frame = FrameID.getBoundingClientRect();", " var hoverLeft = ", hover$left, ";", " var hoverTop = ", hover$top, ";", " var imgWidth = e.target.width;", " var imgHeight = e.target.height;", " var offX = 2 * hoverLeft > imgWidth ? -rect.width -10 : 10;", " var offY = 2 * hoverTop > imgHeight ? -rect.height + 10 : 10;", " var shiftY = e.offsetY + e.target.offsetTop + offY;", " if (offY === 10) {", " shiftY = shiftY + rect.height > frame.height ? -rect.height + 10 + e.offsetY + e.target.offsetTop : shiftY", " } else {", " shiftY = shiftY < 0 ? e.offsetY + e.target.offsetTop + 10 : shiftY", " };", " $('#my_tooltip').css({", " top: shiftY + 'px',", " left: e.offsetX + e.target.offsetLeft + offX + 'px'", " });", "});") ) }) output$GGHoverTable <- renderTable({ df <- hoverData() if(!is.null(df)) { if(nrow(df)){ df <- df[1,] t(df) } } }) output$my_tooltip <- renderUI({ req(hoverData()) req(nrow(hoverData())>0 ) wellPanel( tableOutput('GGHoverTable'), style = 'background-color: #FFFFFFE6;padding:10px; width:400px;border-color:#339fff; width:auto') }) } shinyApp(ui, server) ,内容为{})和列表(key:value)进行加载。

这意味着[]是一个普通列表-您已经知道了它,因为您对其进行了迭代。

由于这是一个普通列表,因此您可以obj用作字典,所以:

.append