On Wed, Sep 20, 2023 at 8:43 AM Dai MIKURUBE <dmikur...@acm.org> wrote:
>
>
> > But I'm afraid that, IIUC, `includeProperty()` works "reactively" against 
> > the
> > actual incoming JSON stream. Then, it works for matching properties, but
> > it could not work for non-match. (In the example, `includeProperty()` might
> > never be called against "foo" while reading {"xxx":{"yyy":"zzz"}}.)
>
> Ah..., wait, if :
>
> 1) `TokenFilter` (extended `JsonPointerBasedFilter`) can be stateful, and
> 2) `TokenFilter` (extended `JsonPointerBasedFilter`) can detect the end of
>    the object or the array ("}" or "]"),
>
> it may probably be feasible by :
>
> 1') changing the state when `includeProperty` receives "foo", and
> 2') raising an Exception when the state is not changed at "}"
>
> Let me think a little bit more.
> I hope (1) is okay. (2) may be feasible by implementing `filterFinishObject`?

Yes, exactly.

Minus that bug you found... :-/

-+ Tatu +-

>
>
> 2023年9月20日(水) 14:30 Dai MIKURUBE <dmikur...@acm.org>:
>>
>> Thanks, Tatu!
>>
>> > I haven't done this, but looking at `JsonPointerBasedFilter` I would
>> > probably try overriding `includeProperty()` method to catch the case
>> > of non-match. Note that you'd also need to override `includeElement`,
>> > and for both make sure to construct an instance of your own sub-class.
>> > I think that should allow you to do what you want.
>> > I'll also file an issue for minor improvement for
>> > `JsonPointerBasedFilter` to make sub-classing bit safer.
>>
>> But I'm afraid that, IIUC, `includeProperty()` works "reactively" against the
>> actual incoming JSON stream. Then, it works for matching properties, but
>> it could not work for non-match. (In the example, `includeProperty()` might
>> never be called against "foo" while reading {"xxx":{"yyy":"zzz"}}.)
>>
>> `TokenFilter` has many other callback methods. I wondered if some of them
>> could be used, but not dived deeper yet. Or, otherwise, I thought that I 
>> might
>> have to hack `FilteringParserDelegate` reimplemented.
>>
>>
>> 2023年9月20日(水) 14:09 Tatu Saloranta <t...@fasterxml.com>:
>>>
>>> On Tue, Sep 19, 2023 at 10:31 AM Dai MIKURUBE <dmikur...@acm.org> wrote:
>>> >
>>> > Hi,
>>> >
>>> > I have a sequence of multiple JSONs in a stream, and wanted to filter the 
>>> > sequence by FilteringParserDelegate / JsonPointerBasedFilter.
>>> >
>>> > It works in normal matching cases. But, I wanted to raise an error when a 
>>> > matching property does not exist.
>>>
>>> Sounds reasonable.
>>>
>>> >
>>> > For example, in the following case :
>>> >
>>> >         JsonParser parser = new FilteringParserDelegate(
>>> >                 
>>> > factory.createParser("{\"foo\":{\"bar\":\"baz\"}}{\"xxx\":{\"yyy\":\"zzz\"}}{\"foo\":{\"bar\":\"qux\"}}"),
>>> >                 new JsonPointerBasedFilter("/foo"),
>>> >                 TokenFilter.Inclusion.ONLY_INCLUDE_ALL,
>>> >                 true
>>> >                 );
>>> >
>>> > This |parser| returns {"bar":"baz"}, and {"bar":"qux"}, with just 
>>> > skipping {"xxx":{"yyy":"zzz"}}.
>>> >
>>> > Here, I wanted to raise an error (Exception) while reading 
>>> > {"xxx":{"yyy":"zzz"}}.
>>> >
>>> >
>>> > Does anyone know how to realize it?  I'm ready to write my own 
>>> > TokenFilter, or to expand JsonPointerBasedFilter by myself.
>>>
>>> I haven't done this, but looking at `JsonPointerBasedFilter` I would
>>> probably try overriding `includeProperty()` method to catch the case
>>> of non-match. Note that you'd also need to override `includeElement`,
>>> and for both make sure to construct an instance of your own sub-class.
>>> I think that should allow you to do what you want.
>>> I'll also file an issue for minor improvement for
>>> `JsonPointerBasedFilter` to make sub-classing bit safer.
>>>
>>> -+ Tatu +-
>>>
>>>
>>> >
>>> >
>>> > Thanks.
>>> >
>>> > --
>>> > You received this message because you are subscribed to the Google Groups 
>>> > "jackson-user" group.
>>> > To unsubscribe from this group and stop receiving emails from it, send an 
>>> > email to jackson-user+unsubscr...@googlegroups.com.
>>> > To view this discussion on the web visit 
>>> > https://groups.google.com/d/msgid/jackson-user/6acc6b25-7292-4b31-a08f-8f541a075158n%40googlegroups.com.
>>>
>>> --
>>> You received this message because you are subscribed to a topic in the 
>>> Google Groups "jackson-user" group.
>>> To unsubscribe from this topic, visit 
>>> https://groups.google.com/d/topic/jackson-user/bLZTjjjXZ28/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to 
>>> jackson-user+unsubscr...@googlegroups.com.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/jackson-user/CAL4a10jR5MgpgF8YBzG%2BRZMZFv9%2Br_WCqgCadNERRTaNH7QiDw%40mail.gmail.com.
>>
>>
>>
>> --
>> Dai MIKURUBE
>>    dmikur...@acm.org
>
>
>
> --
> Dai MIKURUBE
>    dmikur...@acm.org
>
> --
> You received this message because you are subscribed to the Google Groups 
> "jackson-user" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to jackson-user+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/jackson-user/CAJ3Zeoh7ixM%3DdnkFnT%2B91HgZZu-xgKkACyWskSLeANqAtR4PHQ%40mail.gmail.com.

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jackson-user+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jackson-user/CAGrxA25ncD36-vROwZUw6zTyCtkKiNJnQLWPBFZSM_P1jYMEPQ%40mail.gmail.com.

Reply via email to