2016-01-26 5 views
-3

У меня есть несколько строк, как это:Лучший способ удалить подстроку из строки

string x = "[{\"Name\":\"property1\",\"Value\":true},{\"Name\":\"FOO\",\"Value\":12345ddddeeee},{\"Name\":\"property3\",\"Value\":false}]"; 

И нужно удалить

"{\"Name\":\"FOO\",\"Value\":12345ddddeeee}" 

Из исходной строки. Однако это имя FOO + может находиться где угодно в строке. Это не обязательно должно быть между свойством1 и свойством3. Каким будет лучший способ удалить его из общей строки того же формата, что и x?

Значение для FOO может варьироваться

+0

x.Replace возможно –

+0

К сожалению, значение FOO может варьироваться – SKLAK

+0

Что это о той строки, что делает его удаление достойным? Как вы можете определить его? По имени? –

ответ

0

Я придумал, как:

string tobesearched = "{\"Name\":\"FOO\",\"Value\":"; 
string k = x.Substring(x.IndexOf(tobesearched)); 

string final = x.Replace(x.Substring(x.IndexOf(tobesearched), x.IndexOf(tobesearched) + k.IndexOf("}") - x.IndexOf(tobesearched)),"") 
0

Пожалуйста, подтвердите и исправить JSON. Вы можете использовать что-то вроде jsonlint

Если вы можете самостоятельно разобрать строку и найти имя FOO, что может быть лучшим способом. Но тогда вам нужно позаботиться обо всех задачах, связанных с синтаксическим разбором, например, например, ненужных пробелов в строке json.

Если string x не слишком большой (я оставляю вам сделать профилирование, чтобы определить, что является слишком большой для вашей программы), то я бы предложил десериализации string в к List, удаление ненужных данных и сериализации обратно мощь расслабьтесь. См. Пример кода, приведенного ниже. Чтобы выполнить задачу, вам необходимо вызвать метод ParseString(). Обратите внимание, что вам необходимо обновить его в соответствии с вашими потребностями.

public class ParseMyDateItemList 
{ 
    public static void ParseString() 
    { 
     string x = "[{\"Name\":\"property1\",\"Value\":true},{\"Name\":\"FOO\",\"Value\":\"12345ddddeeee\"},{\"Name\":\"property3\",\"Value\":false}]"; 
     var dataItems = Newtonsoft.Json.JsonConvert.DeserializeObject<IList<MyDataItem>>(x); 
     var resultDataItems = dataItems.Except(dataItems.Where(t => t.Name.ToLower() == "foo")).ToList(); 
     var resultJson = Newtonsoft.Json.JsonConvert.SerializeObject(resultDataItems); 

    } 
} 

public class MyDataItem 
{ 
    public string Name { get; set; } 
    public object Value { get; set; } 
} 
+0

Я не могу изменить строки. Некоторые из значений не указаны в кавычках, поэтому не в правильном формате JSON. Строка в исходном вопросе верна, и вы можете видеть, что некоторые из значений не цитируются. – SKLAK

+0

Я пытался обновить свой ответ выше, обработав ошибки синтаксического анализа в 'DeserializeObject'. Но похоже, что Newtonsoft делает это не так, как требуется в вашем случае. Поэтому я считаю, что мой ответ неверен. – Martin

Смежные вопросы