Example #1
0
        public static IEnumerable <JSegment> Parse(ITokenBuffer path)
        {
            var segments = new List <JSegment>();
            var next     = path.MoveNextNonEmptyChar();

            if (next.HasValue && next.Value == JConstants.SegmentRootToken)
            {
                var root = new JSegment(SegmentType.Root, ExpandRoot);
                next = path.MoveNextNonEmptyChar();
                if (!next.HasValue)
                {
                    segments.Add(root);
                    return(segments);
                }

                if (next == JConstants.ExpressionStartToken)
                {//i contain an expression
                    var expr = path.MoveNext((s, i, c) => s[i + 1] == JConstants.ExpressionEndToken);
                    if (!string.IsNullOrEmpty(expr))
                    {
                        root = new JSegment(SegmentType.Root, ExpandRoot, expr);
                    }
                    JUtils.ValidateChar(path.MoveNext(), JConstants.ExpressionEndToken);
                    next = path.MoveNextNonEmptyChar();
                }
                segments.Add(root);
                if (!next.HasValue)
                {
                    return(segments);
                }
                JUtils.ValidateChar(next, JConstants.SegmentSeparatorToken);
            }
            bool hasMoreSegments = true;

            while (hasMoreSegments)
            {
                var segment = path.MoveNext((s, i, c) =>
                                            i == s.Length - 1 || s[i + 1] == JConstants.SegmentSeparatorToken);
                var processedSegments = ProcessRawSegment(segment);
                segments.AddRange(processedSegments);
                next = path.MoveNext();
                if (!next.HasValue)
                {
                    hasMoreSegments = false;
                }
                else
                {
                    JUtils.ValidateChar(next, JConstants.SegmentSeparatorToken);
                }
            }

            return(segments);
        }
Example #2
0
 public static JNode Find(IEnumerable <JSegment> expression, JNode json)
 {
     return(JSegment.Expand(expression, json));
 }
Example #3
0
 public static JNode Find(string expression, JNode json)
 {
     return(JSegment.Expand(expression, json));
 }