2017-10-04 2 views
1
私はAVROファイルを作成する必要がありますが、そのために、私は2つのことが必要

プログラムでJSONをAVRO Schmaに変換する方法はありますか?これらの2つの要件から</p> <p>1)JSON</p> <p>2)アブロスキーマ</p> <p>- 私はJSONがあります:

{"web-app": { 
    "servlet": [ 
    { 
     "servlet-name": "cofaxCDS", 
     "servlet-class": "org.cofax.cds.CDSServlet", 
     "init-param": { 
     "configGlossary:installationAt": "Philadelphia, PA", 
     "configGlossary:adminEmail": "[email protected]", 
     "configGlossary:poweredBy": "Cofax", 
     "configGlossary:poweredByIcon": "/images/cofax.gif", 
     "configGlossary:staticPath": "/content/static", 
     "templateProcessorClass": "org.cofax.WysiwygTemplate", 
     "templateLoaderClass": "org.cofax.FilesTemplateLoader", 
     "templatePath": "templates", 
     "templateOverridePath": "", 
     "defaultListTemplate": "listTemplate.htm", 
     "defaultFileTemplate": "articleTemplate.htm", 
     "useJSP": false, 
     "jspListTemplate": "listTemplate.jsp", 
     "jspFileTemplate": "articleTemplate.jsp", 
     "cachePackageTagsTrack": 200, 
     "cachePackageTagsStore": 200, 
     "cachePackageTagsRefresh": 60, 
     "cacheTemplatesTrack": 100, 
     "cacheTemplatesStore": 50, 
     "cacheTemplatesRefresh": 15, 
     "cachePagesTrack": 200, 
     "cachePagesStore": 100, 
     "cachePagesRefresh": 10, 
     "cachePagesDirtyRead": 10, 
     "searchEngineListTemplate": "forSearchEnginesList.htm", 
     "searchEngineFileTemplate": "forSearchEngines.htm", 
     "searchEngineRobotsDb": "WEB-INF/robots.db", 
     "useDataStore": true, 
     "dataStoreClass": "org.cofax.SqlDataStore", 
     "redirectionClass": "org.cofax.SqlRedirection", 
     "dataStoreName": "cofax", 
     "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver", 
     "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon", 
     "dataStoreUser": "sa", 
     "dataStorePassword": "dataStoreTestQuery", 
     "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';", 
     "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log", 
     "dataStoreInitConns": 10, 
     "dataStoreMaxConns": 100, 
     "dataStoreConnUsageLimit": 100, 
     "dataStoreLogLevel": "debug", 
     "maxUrlLength": 500}}, 
    { 
     "servlet-name": "cofaxEmail", 
     "servlet-class": "org.cofax.cds.EmailServlet", 
     "init-param": { 
     "mailHost": "mail1", 
     "mailHostOverride": "mail2"}}, 
    { 
     "servlet-name": "cofaxAdmin", 
     "servlet-class": "org.cofax.cds.AdminServlet"}, 

    { 
     "servlet-name": "fileServlet", 
     "servlet-class": "org.cofax.cds.FileServlet"}, 
    { 
     "servlet-name": "cofaxTools", 
     "servlet-class": "org.cofax.cms.CofaxToolsServlet", 
     "init-param": { 
     "templatePath": "toolstemplates/", 
     "log": 1, 
     "logLocation": "/usr/local/tomcat/logs/CofaxTools.log", 
     "logMaxSize": "", 
     "dataLog": 1, 
     "dataLogLocation": "/usr/local/tomcat/logs/dataLog.log", 
     "dataLogMaxSize": "", 
     "removePageCache": "/content/admin/remove?cache=pages&id=", 
     "removeTemplateCache": "/content/admin/remove?cache=templates&id=", 
     "fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder", 
     "lookInContext": 1, 
     "adminGroupID": 4, 
     "betaServer": true}}], 
    "servlet-mapping": { 
    "cofaxCDS": "/", 
    "cofaxEmail": "/cofaxutil/aemail/*", 
    "cofaxAdmin": "/admin/*", 
    "fileServlet": "/static/*", 
    "cofaxTools": "/tools/*"}, 

    "taglib": { 
    "taglib-uri": "cofax.tld", 
    "taglib-location": "/WEB-INF/tlds/cofax.tld"}}} 

しかしそれに基づいてAVROスキーマを作成するには?

多くのスキーマがあり、毎回手動でAvroスキーマを作成することはできないため、プログラム的なやり方を探しています。

「avro-tools-1.8.1.jar」をチェックしましたが、JSONから直接Avroスキーマを作成することはできません。

JSON - > Avroスキーマを作成できるJarまたはPythonコードを探しています。 データ型が完璧でない場合(文字列、整数、浮動小数点数は開始には十分です)、大丈夫です。

ありがとうございます!

+0

JSONは基本的にはスキーマレスでMavenの依存関係を見つけることができます。このJSONのソースは何ですか? –

+0

ありがとうございます。私はJSONがスキルレスであることを理解しています。しかし、私のプロジェクトでは、さまざまな顧客がJSONを持っていて、彼らは私をそのように送ります。 JSONは数多くありますが、上記の例は1つだけです。 AVROを作成するように強制する能力はありませんが、私のプロジェクトにはAVRO形式が必要です。私は2つの選択肢があります:1)すべてのJSONの顧客のAVROスキーマを手動で作成し、2)JSONに基づいたAVROスキーマの作成を自動化するためにいくつかのコードを使用してみてください。オプション2を探しています。ありがとう。 – Joe

+0

これを 'String'として格納します。 –

答えて

0

あなたはjsonの入力からavroスキーマを推論するためにKite SDKのutilを使用できます。

https://github.com/kite-sdk/kite/blob/master/kite-data/kite-data-core/src/main/java/org/kitesdk/data/spi/JsonUtil.java#L539

例:

String json = "{\n" + 
      " \"id\": 1,\n" + 
      " \"name\": \"A green door\",\n" + 
      " \"price\": 12.50,\n" + 
      " \"tags\": [\"home\", \"green\"]\n" + 
      "}\n" 
      ; 
    String avroSchema = JsonUtil.inferSchema(JsonUtil.parse(json), "myschema").toString(); 
    System.out.println(avroSchema); 

結果:

{ 
    "type":"record", 
    "name":"myschema", 
    "fields":[ 
     { 
     "name":"id", 
     "type":"int", 
     "doc":"Type inferred from '1'" 
     }, 
     { 
     "name":"name", 
     "type":"string", 
     "doc":"Type inferred from '\"A green door\"'" 
     }, 
     { 
     "name":"price", 
     "type":"double", 
     "doc":"Type inferred from '12.5'" 
     }, 
     { 
     "name":"tags", 
     "type":{ 
      "type":"array", 
      "items":"string" 
     }, 
     "doc":"Type inferred from '[\"home\",\"green\"]'" 
     } 
    ] 
} 

あなたはhere

関連する問題