2016-09-10 3 views
-3

私の最後の質問の文字列を削除します。今、私は私のファイルをきれいにし、削除したいC#JSON.NET「」でjson.netに

{ 
     "type": "06A, 06B, 06C, 06D, 06E", 
     "qt": "6-8-", 
     "id": "06A, 06B, 06C, 06D, 06E6-8-" 
    } 

私のファイルは、ここでそれらの人の一部が含まれていますが型にカンマまたは「、」が含まれるすべてのオブジェクト。 C# remove json child node using newtonsoftをしかし、それは特別な文字が含まれている場合は、オブジェクトを削除する可能性はありません...

私は本当に任意の助けをいただければ幸いです。

私はすでにこれを読んで!私が持っている瞬間

public void filter() 
    { 
     string sourcePath = @Settings.Default.folder; 
     string pathToSourceFile = Path.Combine(sourcePath, "file.json"); 

     string list = File.ReadAllText(pathToSourceFile); 
     Temp temporaray = JsonConvert.DeserializeObject<Temp>(list); 

    } 
+0

あなたは* *ブロックとはどういう意味ですか?期待される出力jsonは何ですか?これまでに何を試しましたか? –

+0

"ブロック"とは、タイプ、Qt、IDを含むオブジェクト全体を意味します。 – Francis

+2

オブジェクトに逆直列化し、 'Where'でフィルタリングします。その後、必要に応じてJSONに再直列化することができます。 – SimpleVar

答えて

2

のではなく、一時的Temp型にデシリアライズ、あなたはJSONを解析し、あなたの基準に合致する"type"プロパティを含むオブジェクトを削除するためにLINQ to JSONを使用することができます。

var root = JToken.Parse(json); 

if (root is JContainer) 
{ 
    // If the root token is an array or object (not a primitive) 
    var query = from obj in ((JContainer)root).Descendants().OfType<JObject>() // Iterate through all JSON objects 
       let type = obj["type"] as JValue        // get the value of the property "type" 
       where type != null && type.Type == JTokenType.String 
        && ((string)type).Contains(",")        // If the value is a string that contains a comma 
       select obj;              // Select the object 
    foreach (var obj in query.ToList()) 
    { 
     // Remove the selected object 
     obj.Remove(); 
    } 
} 

サンプルfiddle

Serialize JSON to a fileに示すように名前fileNameのファイルにシリアル化するために、あなたはrootオブジェクトをシリアライズすることができます

using (var file = File.CreateText(fileName)) 
{ 
    var serializer = JsonSerializer.CreateDefault(new JsonSerializerSettings { Formatting = Formatting.Indented }); 
    serializer.Serialize(file, root); 
} 
+0

大丈夫です。どのようにobj.Remove();の後に続行する必要がありますか。 ?文字列gesamt = JsonConvert.SerializeObject(obj、Formatting.Indented); "Upload" + "\" "ee.json"、gesamt); File.WriteAllText(@ Settings.Default.folder + "\\" + "アップロード" + " ... – Francis

+1

@Francisは 'root'オブジェクトを試しています。偉大な答え、私が変更したいのは、 "高速繰り返しninini"のリストではなく、 '.ToArray()'です。 – SimpleVar

+0

@Francis - それはうまくいかないと言いますか?** *どうやってオブジェクトをJson.NETでファイルにシリアル化できますか?後者の場合、http://www.newtonsoftを参照してください。 com/json/help/html/SerializeWithJsonSerializerToFile.htm。 – dbc