pbjson源碼,pb和json

本文目錄一覽:

求助,python 解析爬取的網頁源碼中的json部分

我用re把json的部分截取出來了,也用json.loads()解析成了字典,現在的問題是裡面需要的信息那部分是有一些是unicode 編碼的,求解。。。。

{“pageName”:”mainsrp”,”mods”:{“shopcombotip”:{“status”:”hide”,”export”:false},”shopstar”:{“status”:”hide”,”export”:false},”navtablink”:{“status”:”hide”,”export”:false},”personalbar”:{“status”:”show”,”data”:{“metisData”:{“nickname”:””,”query”:”秋季打底衫”,”shopItems”:[{“text”:”黃鑽愛買店鋪”,”count”:”500+”,”url”:”/search?q\u003d秋季打底衫\u0026tab\u003dmysearch\u0026filter_rectype\u003d44\u0026stats_click\u003dms_from:44″,”trace”:”metis44″},{“text”:”回頭客愛買店鋪”,”count”:”500+”,”url”:”/search?q\u003d秋季打底衫\u0026tab\u003dmysearch\

python3 對象 |字典|json|yaml|字符串 相互轉化

在研究 k8s 的yaml 配置文件的時候,我總擔心自己一不小心 會寫錯,所以我嚮往 使用將對象 序列化 yaml 的形式,

其實 python object 可以 直接 轉 yaml ,甚至也可以 直接 轉成yaml文件!!!

這裡 會經常用到幾個 函數 vars() ast.

我們先嘗試用最笨的方法 實現 object到yaml 的轉化

在python對象 convert to dict 的形式,使用 vars()函數

然後 dict convert to json 使用 json.dumps(dict)函數

然後 json converte to yaml 使用 ya= yaml.load(json.dumps(dict)) 然後

再 yaml.safe_dump(ya,default_flow_style=False)

至此我們看到 從 python Object — dict —- json — yaml 的轉化

其中 obj dict json yaml 轉 string ,只要 str()函數即可,或者 str(vars())結合

yaml 格式 寫入到文件 ,需要注意的是, open()函數 的mode 一定要是 ‘w’ ,不能是’wb’, b代表是二進制寫入

yaml 寫入的是dict str,使用 ‘wb’ 會報錯,[yaml TypeError: a bytes-like object is required, not ‘str’]

【出現該錯誤往往是通過open()函數打開文本文件時,使用了‘rb’屬性,如:fileHandle=open(filename,’rb’),則此時是通過二進制方式打開文件的,所以在後面處理時如果使用了str()函數,就會出現該錯誤,該錯誤不會再python2中出現。

具體解決方法有以下兩種:

第一種,在open()函數中使用‘r’屬性,即文本方式讀取,而不是‘rb’,以二進制文件方式讀取,可以直接解決問題。

第二種,在open()函數中使用‘rb’,可以在使用之前進行轉換,有以下實例,來自: 】

其實 python object 可以 直接 轉 yaml ,甚至也可以 直接 轉成yaml文件!!!

比如我已經定義了一個 Dog python class,他有 好幾個屬性 並已經賦值初始化了

另外生成 yaml 對象

生成yaml文件

結果是

反過來 yaml —- json — 持久化 json 文件 indent=1屬性是為了讓 json 不以單行展示,而是展開

注意的是 python 的 dict 和set 很相似 ,都是 { }, set 里是list, dict 是鍵值對

【# set object is not JSON serializable [duplicate]

打開 demo.json

yaml — dict

yaml — python object

json — dict

json.loads()

dict– json

json.jumps()

str — dict

newdict=dict(str)

json — python object

一個python object無法直接與json轉化,只能先將對象轉化成dictionary,再轉化成json;對json,也只能先轉換成dictionary,再轉化成object,通過實踐,源碼如下:

yaml — python object

對yaml,也只能先轉換成json —dictionary,再轉化成object,通過實踐,源碼如下:

dict — -python object

python對象 默認都有一個 私有的屬性 dict 取值 就是 object的 字典形式, 賦值就就可以給對象屬性對應賦值

例如json 轉 對象

對象 轉 json

Python之dict(或對象)與json之間的互相轉化

在Python語言中,json數據與dict字典以及對象之間的轉化,是必不可少的操作。

dict字典轉json數據

對象轉json數據

json數據轉成dict字典

json數據轉成對象

json的load()與dump()方法的使用

dump()方法的使用

pb 調用http 接口問題,返回值JSON格式,怎麼獲取返回值

Blob lblb_args

String ls_header

String ls_url

String ls_args

long ll_length

integer li_rc

li_rc = GetContextService( “Internet”, iinet_base )

IF li_rc = 1 THEN

iinet = Create n_iinet

ir = CREATE n_ir_msgbox

ls_url = “?”

ls_args = “version=1method=loginSystemname=hdspwd=666888”

lblb_args = Blob( ls_args )

ll_length = Len( lblb_args )

ls_header = “Content-Type: ” +

“application/x-www-form-urlencoded~n” +

“Content-Length: ” + String( ll_length ) + “~n~n”

li_rc = iinet.PostURL( ls_url, lblb_args, ls_header, ir )

END IF

請教,有用pb解析JSON的方法例子么

我用PB寫過一個函數,把json串轉成datawindow.

不過只適用於單層次的json,就是描述一個關係表的json.

global type f_json2datawindow from function_object

end type

forward prototypes

global function string f_json2datawindow (string json_file, ref datawindow dw_1)

end prototypes

global function string f_json2datawindow (string json_file, ref datawindow dw_1);string ls_file

ls_file=json_file

//查找替換全部的回車,避免影響判斷

ls_file=f_replace_string_quotecharacter(ls_file,char(13),’ ‘)

ls_file=f_replace_string_quotecharacter(ls_file,char(10),’ ‘)

//查找替換全部的TAB

ls_file=f_replace_string_quotecharacter(ls_file,char(9),’ ‘)

//濾掉首尾空格

ls_file=trim(ls_file)

if len(ls_file) =0 then

return(‘!!無數據’)

end if

if left(ls_file,1) ‘{‘ or right(ls_file,1)’}’ then

return(‘!!請用花括號把全部數據括起來。’)

end if

ls_file=mid(ls_file,2,len(ls_file) – 2) //取得花括號里的部分

//取標題

string ls_title

string ls_parm[],ls_clm[]

string ls_clmname[]

long n,m,p,q,i

dw_1.reset()

n=f_gettagparm(ls_file,'”‘,ls_parm[])

if n=2 then

return(‘!!請用半角雙引號把表單的標題欄括起來’)

end if

ls_title=ls_parm[2]

//找之後的冒號

//得先找標題欄結尾 q

p=pos(ls_file,'”‘+ls_parm[2]+'”‘)

q=p+len(‘”‘+ls_parm[2]+'”‘) – 1

//去掉標題欄

ls_file=right(ls_file,len(ls_file) – q )

//過濾掉空格(標題欄與冒號之間的空格)

ls_file=trim(ls_file)

if left(ls_file,1)’:’ then

return(‘!!標題欄後應跟着冒號’)

end if

//去掉冒號再濾空格再去掉首尾方括號

ls_file=trim(right(ls_file,len(ls_file) – 1))

if left(ls_file,1)'[‘ and right(ls_file,1)’]’ then

return(‘!!請將數據用方括號括起來’)

end if

ls_file=trim(mid(ls_file,2,len(ls_file) – 2))

//得到數據

string ls_data

ls_data = ls_file

//應至少有1行,否則無法獲得字段名

//第一個應該是左花括號

if left(ls_file,1)'{‘ then

return(‘!!第一行數據應用左花括號“{”開頭’)

end if

//找第一行的右花括號

p=f_pos_outof_quote(ls_file,’}’,1)

if p=2 then

else

return(‘!!第一行數據缺少右花括號“}”做結尾’)

end if

//去掉花括號,獲得第1行

ls_file=trim(mid(ls_file,2, p – 2))

//列分解

n=f_gettagparm_quotecharacter(ls_file,’,’,ls_clm)

if n=0 then

return(‘!!列數為0’)

end if

//各列取得列名

string ls_clmnames

for i= 1 to n

ls_clm[i]=trim(ls_clm[i]) // 去掉收尾空格

m=f_gettagparm_quotecharacter(ls_clm[i],’:’,ref ls_parm)

if m=0 then

return(‘!!無法取得第1行第’+string(i)+’列的列名’)

end if

ls_parm[1]=trim(ls_parm[1])

ls_clmname[i]=ls_parm[1]

if left(ls_clmname[i],1)='”‘ then ls_clmname[i] = right(ls_clmname[i],len(ls_clmname[i]) – 1)

if right(ls_clmname[i],1)='”‘ then ls_clmname[i] = left(ls_clmname[i],len(ls_clmname[i]) – 1)

if pos(ls_clmname[i],'{‘)=1 or pos(ls_clmname[i],’}’)=1 or pos(ls_clmname[i],'[‘)=1 or pos(ls_clmname[i],’]’)=1

or pos(ls_clmname[i],’,’)=1 or pos(ls_clmname[i],char(9))=1 then

return(‘!!第1行第’+string(i)+’列的列名中含有非法的字符’)

end if

ls_clmnames = ls_clmnames + ‘[‘+ls_clmname[i]+’]’

next

//生成數據窗口

string sqlstr

sqlstr=’select’

for i= 1 to n

sqlstr=sqlstr +’ lpad(~’ ~’,1000) as “‘+ls_clmname[i]+'” ,’

next

sqlstr=left(sqlstr,len(sqlstr) – 1) +’ from dual ‘

if f_gendw(dw_1,sqlstr) 0 then

return(‘!!生成數據窗口失敗’)

end if

//從ls_data加載數據

long ll_begin ,ll_end

long quote_count

long c,r

long ret

string ls_row

string ls_value[]

ls_data=trim(ls_data) //過濾首尾空格後,首尾應都是花括號

if left(ls_data,1)'{‘ then

return(‘!!獲取數據時,第1行開頭不是花括號’)

end if

dw_1.setredraw(false)

p=1

ll_begin=p

q=f_pos_outof_quote(ls_data,’}’,p)

r=1

do while p=1

if q=1 then

quote_count=f_charcount(mid(ls_data ,ll_begin +1,q – ll_begin – 1),'”‘) //數花括號之間的雙引號數量

if mod(quote_count,2)=1 then //是奇數,找到的花括號是數據內容,則忽略

q=f_pos_outof_quote(ls_data,’}’,q+1)

else

ls_row=trim(mid(ls_data,ll_begin+1,q – ll_begin – 1))

r++

c++

dw_1.insertrow(c)

//解析列

n=f_gettagparm_quotecharacter(ls_row,’,’,ls_clm)

if n=0 then

dw_1.setredraw(true)

return(‘!!第’+string(c)+’行的列數為0’)

end if

//各列取得列名

for i= 1 to n

ls_clm[i]=trim(ls_clm[i]) // 去掉收尾空格

m=f_gettagparm_quotecharacter(ls_clm[i],’:’,ref ls_parm)

if m=0 then

dw_1.setredraw(true)

return(‘!!無法取得第’+string(c)+’行第’+string(i)+’列的列名’)

end if

ls_parm[1]=trim(ls_parm[1])

ls_clmname[i]=ls_parm[1]

if left(ls_clmname[i],1)='”‘ then ls_clmname[i] = right(ls_clmname[i],len(ls_clmname[i]) – 1)

if right(ls_clmname[i],1)='”‘ then ls_clmname[i] = left(ls_clmname[i],len(ls_clmname[i]) – 1)

ls_value[i]=trim(ls_parm[2])

if left(ls_value[i],1)='”‘ then ls_value[i] = right(ls_value[i],len(ls_value[i]) – 1)

if right(ls_value[i],1)='”‘ then ls_value[i] = left(ls_value[i],len(ls_value[i]) – 1)

ret=pos(ls_clmnames,'[‘+ls_clmname[i]+’]’)

if ret=0 then

dw_1.setredraw(true)

return(‘!!第’+string(c)+’行第’+string(i)+’列寫入數據窗口時,列名(‘+ls_clmname[i]+’)不存在於第1行’)

end if

ret=dw_1.setitem(c,ls_clmname[i],ls_value[i])

if isnull(ret) then

dw_1.setredraw(true)

return(‘!!第’+string(c)+’行第’+string(i)+’列寫入數據窗口時,參數為空’)

elseif ret1 then

dw_1.setredraw(true)

return(‘!!第’+string(c)+’行第’+string(i)+’列寫入數據窗口時,行號或列名(‘+ls_clmname[i]+’)不存在’)

end if

next

p=f_pos_outof_quote(ls_data,'{‘,q + 1)

ll_begin=p

q=f_pos_outof_quote(ls_data,’}’,p)

end if

else

dw_1.setredraw(true)

return(‘!!獲取數據時,第’+string(r)+’行找不到右邊的花括號’)

end if

loop

dw_1.setredraw(true)

return(ls_title)

end function

易語言把編輯框1.內容寫到json的文件里去,怎麼寫求源碼

寫到文件 (取運行目錄 () + “\json”, 到字節集(編輯框1.內容))

PB怎麼獲取json返回的值

pb本身是不能處理json數據的,你這數據來自哪裡?如果是瀏覽器,你可以用js處理成字符串通過pb與瀏覽器的接口返回給pb

原創文章,作者:AXLJ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/139968.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
AXLJ的頭像AXLJ
上一篇 2024-10-04 00:23
下一篇 2024-10-04 00:23

相關推薦

  • 雲智直聘 源碼分析

    本文將會對雲智直聘的源碼進行分析,包括前端頁面和後端代碼,幫助讀者了解其架構、技術實現以及對一些常見的問題進行解決。通過本文的閱讀,讀者將會了解到雲智直聘的特點、優勢以及不足之處,…

    編程 2025-04-29
  • JSON的MD5

    在Web開發過程中,JSON(JavaScript Object Notation)是最常用的數據格式之一。MD5(Message-Digest Algorithm 5)是一種常用…

    編程 2025-04-29
  • 使用Java將JSON寫入HDFS

    本篇文章將從以下幾個方面詳細闡述Java將JSON寫入HDFS的方法: 一、HDFS簡介 首先,先來了解一下Hadoop分布式文件系統(HDFS)。HDFS是一個可擴展性高的分布式…

    編程 2025-04-29
  • Python網站源碼解析

    本文將從多個方面對Python網站源碼進行詳細解析,包括搭建網站、數據處理、安全性等內容。 一、搭建網站 Python是一種高級編程語言,適用於多種領域。它也可以用於搭建網站。最常…

    編程 2025-04-28
  • 如何使用Newtonsoft datatable轉Json

    Newtonsoft DataTable 是一個基於.NET的JSON框架,也是一個用於序列化和反序列化JSON的強大工具。 在本文中,我們將學習如何使用Newtonsoft Da…

    編程 2025-04-28
  • 源碼是什麼

    源碼是一段計算機程序的原始代碼,它是程序員所編寫的可讀性高、理解性強的文本。在計算機中,源碼是指編寫的程序代碼,這些代碼按照一定規則排列,被計算機識別並執行。 一、源碼的組成 源碼…

    編程 2025-04-27
  • JPRC – 輕鬆創建可讀性強的 JSON API

    本文將介紹一個全新的 JSON API 框架 JPRC,通過該框架,您可以輕鬆創建可讀性強的 JSON API,提高您的項目開發效率和代碼可維護性。接下來將從以下幾個方面對 JPR…

    編程 2025-04-27
  • Go源碼閱讀

    Go語言是Google推出的一門靜態類型、編譯型、並髮型、語法簡單的編程語言。它因具有簡潔高效,內置GC等優秀特性,被越來越多的開發者所鍾愛。在這篇文章中,我們將介紹如何從多個方面…

    編程 2025-04-27
  • 使用Python獲取JSON並解析

    本文將介紹如何使用Python獲取JSON數據並解析相關內容。通過使用Python的第三方庫,我們可以輕鬆地處理JSON數據,包括讀取、提取和操作JSON數據。 一、獲取JSON數…

    編程 2025-04-27
  • Python存為JSON的方法及實例

    本文將從以下多個方面對Python存為JSON做詳細的闡述。 一、JSON簡介 JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,易於人閱…

    編程 2025-04-27

發表回復

登錄後才能評論