nodejs xml2js one-liner

このブログは Open Live Writer で書いてます。このエディターは自動でHREFリンクを埋め込む機能があります。

image

上の画面ショットの設定はXMLファイルに保存されます。こんな感じ。

$ head -5 /mnt/c/Users/$LOGNAME/AppData/Local/Packages/\
*.OpenLiveWriter_*/LocalCache/Roaming/OpenLiveWriter/LinkGlossary/linkglossary.xml
<?xml version="1.0" encoding="utf-8"?>
<glossary>
  <entry>
    <text>Open Live Writer site</text>
    <url>http://www.OpenLiveWriter.org</url>

Node の xml2js というXMLをJSONに変換してくれるmoduleで変換してみます。

var parser = new xml2js.Parser();

xml2js – npm

上のページのリンクした箇所を無理やり(笑) one-liner にしてみました。そして jq に渡します。

$ node -e \
  "var fs=require('fs'),xml2js=require('xml2js');
   fs.readFile(0,function(err,data){
     xml2js.Parser().parseString(data,function(err,result){
       console.log(JSON.stringify(result));});});" \
< /mnt/c/Users/$LOGNAME/AppData/Local/Packages/*.OpenLiveWriter_*/LocalCache/Roaming/OpenLiveWriter/LinkGlossary/linkglossary.xml |
jq -r '.glossary.entry[]|"\(.text[0])\t\(.url[0])"'
Open Live Writer site   http://www.OpenLiveWriter.org
Cloudera        https://www.cloudera.com/
Hue     http://gethue.com/
Apache Hadoop Yarn      http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html
#gcpug  https://twitter.com/hashtag/gcpug?f=tweets&vertical=default&src=hash
#openshiftjp    https://twitter.com/hashtag/openshiftjp?f=tweets&vertical=default&src=hash
#k8sjp  https://twitter.com/hashtag/k8sjp?f=tweets&vertical=default&src=hash
弊社    https://jp.cloudera.com/
仕事    https://jp.cloudera.com/
会社    https://jp.cloudera.com/
本業    http://jp.cloudera.com/
社内    https://jp.cloudera.com/
#secjaws        https://twitter.com/hashtag/secjaws?f=live

Promise 使えばもっと短くなると思うので成功したらまた書きたいと思います。

Apache Impala で JSON

以前Oracle社員時代にOracle DBのJSON機能についてブログ書きました。

SQL> select2 JSON_VALUE( httpuritype(‘http://ergast.com/api/f1/2015/constructors/mclaren/constructorstandings.json&#8217;)..

Oracle 12c JSON機能でマクラーレン・ホンダの順位を見てみる | Oracle  Blog

同じことを Apache Impala でやってみます。UIは Hue です。誰でも試せます。

GET_JSON_OBJECT(STRING json_str, STRING selector)

Impala Miscellaneous Functions

Oracle 12c の JSON_VALUE() 関数と同等のものはImpalaでは上の GET_JSON_OBJECT()のようです。

また、Oracle DBでは httpuritype()でネットワーク経由でデータを読めましたがImpalaでは同名の関数はないので以下では文字列は上記引用部分中にあるAPIエンドポイントのレスポンスJSONをベタにコピペしてます。

image

緑の下線部が今回試したかったGET_JSON_OBJECT()関数です。結果は赤箱部分のように以前Oracleでやった時と同じになりました!

selector JSON path は

$.MRData.StandingsTable.StandingsLists[0].ConstructorStandings[0].position

でOracleで試した際と同じものです。この記法はたしか業界標準です。