JSON API查询语言

作者: Lupino | 来源:发表于2018-11-07 07:46 被阅读55次

    在使用 JSON api 的时候,经常会遇见一些蛋疼的事情,我只要获取一些数据就可以,但 API 确给我所有的数据。于是我把 graphql 给集成进去,我可以获得我想要的字段,但我还是没办法进行预处理。

    在某一天我看到了 Functional sed for JSON, 它可以让我写一些函数来处理 json 的数据,而这些函数都是安全的。于是我豁然开朗,如果把它集成到 JSON api 上面就可以解决我的痛点。

    import Data.Aeson (Value)
    import Web.Scotty (ActionM, rescue, param)
    
    checkSed :: Value -> ActionM Value
    checkSed j = do
      inp <- param "jl" `rescue` (""::String)
      if null inp then return j
      else
        case parseText "" (pack inp) of
          Left err -> do
            liftIO $ print err
            return j
          Right expr0 -> do
            let expr = ApplicationExpression expr0 (valueToExpression j)
            let core = eval (foldl (\e (v, f) -> subst v f e) (desugar expr) (M.toList scope))
            return $ coreToValue core
    

    然后在每个 json 输出数据的时候加上 checkSed 就可以 jl 进行处理数据。

    modify "content" (\o->{blocks: map (modify "entityRanges" (filter (\r-> o.entityMap[showInt r.key].type /= "ASR-const"))) o.blocks, entityMap: filterWithKey (\k v -> v.type /= "ASR-const") o.entityMap})
    

    参考:Helper.hs#L155

    相关文章

      网友评论

        本文标题:JSON API查询语言

        本文链接:https://www.haomeiwen.com/subject/dnhmxqtx.html