我正在读取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文件并替换键值的尝试,因此请保持友好。我可能做错了所有事!