从JObject移除双大括号

时间:2019-12-15 15:52:46

标签: c# json

我有一个带有以下内容的XYZ.Json文件。

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

使用以下代码,我尝试从此Json读取并返回JObject,但在json结构的开头和结尾处添加了额外的花括号。

{
  "ABC": "Account",
  "CDE": "Balance",
  "EFG": "Enquiry"
}

obj1:

JObject obj1 = JObject.Parse(System.IO.File.ReadAllText(@".\XYZ\install\XYZ.json));

我已经尝试过option,转换了{{ "ABC": "Account", "CDE": "Balance", "EFG": "Enquiry" }} ,但是没有用。

也尝试过此代码,但仍然看到相同的问题。

Jobject.Tostring()

obj3:

    Dictionary<string, string> dict = new Dictionary<string, string>();
    JObject obj = JObject.Parse(System.IO.File.ReadAllText(@".\XYZ\install\XYZ.json));

    foreach (JProperty prop in obj.Properties())
    {
        dict.Add(prop.Name, obj.GetValue(prop.Name).ToObject<string>());
    };


    JObject obj3 = JObject.Parse(JsonConvert.SerializeObject(dict));

请提出其他解决方案。

1 个答案:

答案 0 :(得分:0)

,您必须先将字典转换为json格式

    JObject obj = JObject.Parse(File.ReadAllText(@"C:\temp\test.txt"));
    Dictionary<string, string> dict = new Dictionary<string, string>();

    foreach (JProperty prop in obj.Properties())
    {
        dict.Add(prop.Name, obj.GetValue(prop.Name).ToObject<string>());
    };

    var entries = dict.Select(d => string.Format($@"""{d.Key}"": ""{d.Value}"""));
    string convertedString = "{" + string.Join(",", entries) + "}";
    JObject obj3 = JObject.Parse(convertedString);

obj3将为您提供与obj相同的对象。

双曲括号是Json对象的内部代表。您不能删除双括号,因为这就是JSON在JObject中的表示方式。在上面的代码中,从Json到Dictionary的转换然后再回到Json的工作是正确的。

obj和obj3变量都如下所示。

enter image description here

注意:您的示例仅适用于string:string json ..如果您使用strin:object,则此方法将无效。