Библиотеки Javascript, которые позволяют SQL-запросы на данные JSON?
Скажем, данные JSON поступают из одной таблицы MySQL:
someJSON = [ { name: 'bill' , sex:'M', income:50000 },
{ name: 'sara' , sex:'F', income:100000 },
...
];
И скажем, что псевдокод:
"Получить все объекты персонажа всех sex:F
из income
> 60000`.
Существуют ли библиотеки javascript, которые позволяли бы кодировать такие запросы в данных JSON с использованием синтаксиса SQL или SQL.
Если вам интересно, какой-то контекст:
Я делаю front-end веб-сервис анализа данных для своей организации, не зная, каким будет будущий бэкэнд. В будущем они будут переносить свои данные из таблиц MS Access в некоторую базу данных типа MySQL. До тех пор я использую статические файлы JSON для начала разработки и думал, что в будущем им может быть полезно, чтобы мои javascript-запросы отображались в виде запросов MySQL. (Текущая база данных MS Access недоступна из Интернета.)
Ответы
Ответ 1
Отъезд jslinq:
var myList = [
{FirstName:"Chris",LastName:"Pearson"},
{FirstName:"Kate",LastName:"Johnson"},
{FirstName:"Josh",LastName:"Sutherland"},
{FirstName:"John",LastName:"Ronald"},
{FirstName:"Steve",LastName:"Pinkerton"}
];
var exampleArray = JSLINQ(myList)
.Where(function(item){ return item.FirstName == "Chris"; })
.OrderBy(function(item) { return item.FirstName; })
.Select(function(item){ return item.FirstName; });
Ответ 2
Я использую Taffydb.
TaffyDB - это библиотека opensouce, которая предоставляет функции базы данных в ваших приложениях JavaScript.
http://taffydb.com/
Ответ 3
Вы можете попробовать alasql.js. Это чистый клиентский SQL-сервер на базе JavaScript, где вы можете делать запросы по объектам JSON.
// Fill table with data
var data = [ { name: 'bill' , sex:'M', income:50000 },
{ name: 'sara' , sex:'F', income:100000 }];
// Do the query
console.log(alasql("SELECT * FROM ? WHERE sex='F' AND income > 60000",[data]));
Попробуйте это в Fiddle
Ответ 4
Я видел несколько linq как javascript-библиотеки в прошлых поисковых системах Google.
Изменить - здесь пара
http://linqjs.codeplex.com/
http://jslinq.codeplex.com/
http://jsinq.codeplex.com/ < - действительно крутая игровая площадка для этого
Ответ 5
Вам может быть интересно проверить MongoDB, хранилище данных в стиле JSON с полной информацией. Вот его синтаксис запроса:
db.users.find({'last_name': 'Smith'})
Для вашего примера вопрос:
db.users.find({'sex': 'F', 'income' : {$gt : 60000}})
Ответ 6
Существует также JsonSql, который, похоже, похож на то, что вы ищете. Проблема только в том, что он не обновлялся в 12/30/2007. Тем не менее, код для захвата и воспроизведения.
Ответ 7
В зависимости от того, какие браузеры/версии вы должны поддерживать, я бы стремился использовать клиентский SQL-клиент HTML5, подталкивая мои данные JSON в одну или несколько таблиц и используя мощность истинных SQL-запросов.
Здесь спецификация проекта: http://www.w3.org/TR/webdatabase/
Ответ 8
Существует также запрос стиля XPath под названием JSONPath, который мне нравится http://goessner.net/articles/JsonPath/
И есть это http://code.google.com/p/jfunk/
Какие пользовательские селектора стиля jQuery для фильтрации данных
Ответ 9
Я знаю, что вопрос старый, но я просто пришел сюда через поиск Google. Я просто заговорю о objeq. Выглядит довольно многообещающим и очень тем, что вы ищете.
Ответ 10
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
<script type="text/javascript" src="linq.js"></script>
<script type="text/javascript">
var jsonArray = [
{ "user": { "id": 100, "screen_name": "d_linq" }, "text": "to objects" },
{ "user": { "id": 130, "screen_name": "c_bill" }, "text": "g" },
{ "user": { "id": 155, "screen_name": "b_mskk" }, "text": "kabushiki kaisha" },
{ "user": { "id": 301, "screen_name": "a_xbox" }, "text": "halo reach" }
]
// ["b_mskk:kabushiki kaisha", "c_bill:g", "d_linq:to objects"]
var queryResult = Enumerable.From(jsonArray)
.Where(function (x) { return x.user.id < 200 })
.OrderBy(function (x) { return x.user.screen_name })
.Select(function (x) { return x.user.screen_name + ':' + x.text })
.ToArray();
// shortcut! string lambda selector
var queryResult2 = Enumerable.From(jsonArray)
.Where("$.user.id < 200")
.OrderBy("$.user.screen_name")
.Select("$.user.screen_name + ':' + $.text")
.ToArray();
console.log(queryResult);
console.log(queryResult2);
</script>
</head>
<body>
</body>
</html>