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.