1

使用GraphQLHub,我可以针对 Hacker News 上的前三项新闻运行此查询:

{
  hn {
    topStories(limit: 3) {
      title
      url
      timeISO
      by {
        id
      }
    }
  }
}

如何将此查询导出(或转换)为 JSON?是否有一个 npm 包可以做到这一点?

我看到有graphql-to-json但看起来你需要将一个.js文件传递给它,而不是像上面那样的原始查询。

4

1 回答 1

0

有很多方法可以做到这一点,但一个简单的实现是使用 JS 对象来映射查询,然后使用JSON.stringify()

如果您可以将上述查询作为字符串访问,那么您可以按照我的意思进行操作。AFAIK,如果查询在 JS 环境中不是一个字符串,而不是像 GraphiQL 这样的 IDE,它就会爆炸。

let QueryStore = {}

const getHNTopStoriesQuery = `
    query getHNTopStories {
        hn {
            topStories(limit: 3) {
                title
                url
                timeISO
                by {
                id
                }
            }
        }
    }
`   

const addQuery = (queryToAdd, queries) => {
    let key = queryToAdd.trim().split(' ')[1]
    let queryEntry = {}
    queryEntry[key] = queryToAdd

    return Object.assign({}, queries, queryEntry)
}

const queryToGraphiQLQueryString = query => {
    let lines = query.trim().split('\n')
    let queryLines =lines.slice(1, -1).map(line => line.trim())

    return encodeURIComponent(`{${queryLines.join(' ')}}`)
}

// Add Query to Store
QueryStore = addQuery(getHNTopStoriesQuery, QueryStore)

// Get a GraphiQL URI query string of a Query
let qs = queryToGraphiQLQueryString(QueryStore['getHNTopStories'])
console.log(qs)

// Print a prettified JSON of the QueryStore
console.log(JSON.stringify(QueryStore, null, 2))
于 2018-01-31T00:24:51.543 回答