在 clojure 中将 json 对象转换为字符串

converting json object to string in clojure

我正在尝试使用 clojure、sql korma 和 angularJS 显示从 table 到 UI 屏幕的 json 对象。我有一个 table 列的数据类型,因为 json.The 数据库是 postgres.When 我正在尝试运行代码,但出现错误。 我查询数据库的代码如下。

<div class="snippet" data-lang="js" data-hide="false">
<div class="snippet-code">
<pre>(ns error_api_transactions.models.bre_dve_errors_api_transactions
  (:require [debug.logger :as logger])
  (:use [korma.core]
        [core.config.db]
        [utils.gen_password]
        [core.file-store]
        [utils.uuid :as utils-uuid]))


(defentity bre_errors
  (pk :id)
  (table :bre_errors)
  (database master-db))

(defentity dve_errors
  (pk :id)
  (table :dve_errors)
  (database master-db))

 (defentity vendor_detail
  (pk :id)
  (table :vendor)
  (database master-db))


    (defn get-all-bre-errors
       ^{:Comments ""}
       []
      

      
       
       (select bre_errors
                       (fields [:vendor_id :vendor_id]
                               [:error_json]
                               [:error_xml :error_xml]
                               [:input :input]
                               [:created_on :created_on]
                               [:updated_on :updated_on]
                               [:deleted_on :deleted_on]
                               [:po_number :po_number]
                               [:purchase_order_id :purchase_order_i])
                       )

      )

错误是: com.fasterxml.jackson.core.JsonGenerationException:无法 JSON 编码 class 的对象:class org.postgresql.util.PGobject:["Container Numbers in all nodes must be consistent"]

我不知道我们是否可以在这里使用 java 的任何 toString 方法来 enter code here 将 JSON 转换为普通字符串。 非常感谢任何帮助

由于 :error_json 列的数据类型在 postgres 数据库中是 "json",因此您必须将其从 "PGobject json" 类型转换为 "string"。

是的,您可以使用 toString 来更改类型。

下面是代码片段:

(map (fn [value] (update-in value [:error_json] #(.toString %))) (get-all-bre-errors))  

作为修改应用程序代码的替代方法,您可以修改 SQL 查询,如下所示:

SELECT id, jsonbValue::TEXT
FROM myTable

添加 ::TEXT 会将 jsonb 转换为文本。