コード例 #1
0
        public async Task <JToken> GetData(DynDatabaseRequest request, bool shallow = false)
        {
            var domain   = DbService.GetDomainPath(request.DatabaseId);
            var dataPath = new FlatJsonPath(request.Path);

            return(await Task.Run(() =>
            {
                if (!DbService.Store.Exists(domain))
                {
                    return null;                                  // 404 - There's no data container
                }
                // Unflatten and retrieve JSON object
                var flatJsonDict = new Dictionary <string, string>();
                // Use an optimization to only fetch requested keys
                foreach (var key in DbService.Store.GetKeysEnumerable(domain).Where(x =>
                                                                                    x.StartsWith(dataPath.TokenPrefix, StringComparison.Ordinal) ||
                                                                                    x.StartsWith(dataPath.ArrayPrefix, StringComparison.Ordinal)))
                {
                    var val = DbService.Store.Get(domain, key);
                    flatJsonDict.Add(key, val);
                }
                var unflattenedJObj = new FlatJsonObject(flatJsonDict).Unflatten();
                if (shallow)
                {
                    var resultObject = unflattenedJObj.SelectToken(dataPath.TokenPath);
                    if (resultObject is JArray)
                    {
                        return new JArray(resultObject.Children().Select(c => new JValue(c ?? false)));
                    }
                    if (resultObject is JObject)
                    {
                        var filteredProps = (resultObject as JObject).Properties().Select(p => new JProperty(p.Name,
                                                                                                             (p.Children().FirstOrDefault() is JObject ? true : p.Value) ?? false));
                        return new JObject(filteredProps);
                    }
                    return null;
                }
                return unflattenedJObj.SelectToken(dataPath.TokenPath);
            }));
        }
コード例 #2
0
        public static async Task <JToken> GetData(string path)
        {
            var convTokenPath = FlatJsonPath.ConvertUriPathToTokenPath(path);

            return(await Task.Run(() =>
            {
                var db = DatabaseAccessService.OpenOrCreateDefault();
                var store = db.GetCollection <JsonObjectStoreContainer>(DatabaseAccessService.GetDataStoreKey(0));

                var rootObjectContainer = store.FindAll().FirstOrDefault();
                var unflattenedJObj = new FlatJsonObject(rootObjectContainer.FlattenedJObject).Unflatten();
                return unflattenedJObj.SelectToken(convTokenPath);
            }));
        }