更新json文件中的值时出现双引号问题

时间:2020-09-16 11:33:25

标签: json parsing key updating

我正在读取json文件,该文件是3D Slicer引擎的配置文件。我正在使用以下代码(摘要,不完整)

Dim json As String = File.ReadAllText("C:\tmp\theme.json")

Dim jsonObj As Object = Newtonsoft.Json.JsonConvert.DeserializeObject(json)

我正在从文件中读取特定值,并将该值(RGB值)放入文本框中,并在图片框中显示找到的颜色:

Dim read = Newtonsoft.Json.Linq.JObject.Parse(json)

col = read.Item("colors")("layerview_inset_0").ToString
        
col = Replace(col, "[", "")
        
col = Replace(col, "]", "")
        
col = Trim(col)
        
TextBox1.Text = Trim(Replace(col, " ", ""))
        
cols = Split(col, ",")
        
PictureBox1.BackColor = Color.FromArgb(cols(0), cols(1), cols(2))

一切正常。

接下来我要做的是通过单击图片框并选择其他颜色来加载拾色器:

With ColorDialog1
            
'Get the current color from the picturebox
            
.Color = ColorDialog1.Color
            
If .ShowDialog = DialogResult.OK Then
                
Me.PictureBox1.BackColor = .Color
                
TextBox1.Text = .Color.R.ToString & "," & .Color.G.ToString & "," & .Color.B.ToString & "," & "255"
                
code = "[" & .Color.R.ToString & "," & .Color.G.ToString & "," & .Color.B.ToString & "," & "255" & "]"
            
End If
        
End With

这将创建一个字符串值(代码),然后将其用于替换文件中的键:

jsonObj("colors")("layerview_inset_0") = code

然后写回更新的文件

Dim output As String = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented)

File.WriteAllText("C:\tmp\theme.json", output)

这也很好用,但是插入的值用双引号引起来。

文件中的原始值如下:

 "layerview_inset_0": [ 
      255,
      255,
      255,
      255
      ],

但是我更新后是:

 "layerview_inset_0": "[0,0,160,255]",

这会导致程序在加载文件时失败。 如果我删除双引号就可以了。 我以前没有使用过json文件,并且花了很长时间才走到这一步。如何将所需的数据添加到json文件中而不用双引号引起来? 我期望这是因为我将值插入为字符串,但是我不知道其他任何处理方式,因为我需要确保还添加[和]以及每个RGB值(如原始格式)。

除了在文件中的新值周围加上双引号之外,其他所有方法都运行良好,但是如何将这些数据添加到文件中而又没有发生呢? 对此,我将不胜感激,但请记住,这是我第一次解析json文件并替换键值的尝试,因此请保持友好。我可能做错了所有事!

0 个答案:

没有答案
相关问题