Я пытаюсь выяснить, можно ли найти отдельный keys
из строки JSON
в Javascript и вернуть его Value
с Regex
. Это похоже на создание JSON
инструмента поиска.
Представьте себе следующий JSON
"{
"Name": "Humpty",
"Age": "18",
"Siblings" : ["Dracula", "Snow White", "Merlin"],
"Posts": [
{
"Title": "How I fell",
"Comments": [
{
"User":"Fairy God Mother",
"Comment": "Ha, can't say I didn't see it coming"
}
]
}
]
}"
Я хочу иметь возможность выполнять поиск по строке JSON
и извлекать только отдельные свойства.
давайте предположим, что это уже function
, это будет выглядеть примерно так.
function getPropFromJSON(prop, JSONString){
// Obviously this regex will only match Keys that have
// String Values.
var exp = new RegExp("\""+prop+"\"\:[^\,\}]*");
return JSONString.match(exp)[0].replace("\""+prop+"\":","");
}
Он вернет подстроку Value
для Key
.
e.g.
getPropFromJSON("Comments")
> "[
{
"User":"Fairy God Mother",
"Comment": "Ha, can't say I didn't see it coming"
}
]"
Если вам интересно, почему я хочу сделать это вместо использования JSON.parse()
, я создаю хранилище документов JSON вокруг localStorage
. localStorage
поддерживает только пары ключ/значение, поэтому я сохраняю строку JSON
всего Document
в уникальном файле Key
. Я хочу иметь возможность выполнять запрос к документам, в идеале без накладных расходов на JSON.parsing()
все Collection
из Documents
, а затем рекурсивно по Keys
/вложенным Keys
, чтобы найти совпадение.
Я не лучший в regex
, поэтому я не знаю, как это сделать, и возможно ли это вообще только с regex
. Это всего лишь эксперимент, чтобы выяснить, возможно ли это. Любые другие идеи в качестве решения будут оценены.
cache
, но только для извлеченныхDocuments
. Я не могу представить, что хранение всех документов в памяти будет быстрее. Мне все еще нужноiterate
поKeys
в каждомDocument
во всемCollection
. Что является гораздо большим ударом по производительности, чемJSON.parse()
. - person AshHeskes   schedule 06.01.2012Value
, однажды найденным, запустив его, по иронии судьбыJSON.parse()
. Просто чтобы быть ясным, я не пытаюсь избежать использованияJSON.parse()
, внутренне он мало что делает, но все равно запускает несколькоRegex
. Я пытаюсь улучшить производительность в целом для варианта использования. - person AshHeskes   schedule 06.01.2012