Kafka很多時候的消息輸出都是Pb格式的,不方便查看,但是通過以下的手法可以轉化成json格式進行查看;
https://blog.csdn.net/tmr1016/article/details/113659436?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.pc_relevant_default&utm_relevant_index=6
【安裝成功即可】
1.python打開並進行main.py;
2.運行成功界面如下:
3.把這個image.bin放在你自己電腦的這個目錄下;
4.打開終端
(1)復制1條pb消息;⚠️不需要粘貼這條消息⚠️
(2)執行: pbpaste | base64 -d | protoc --descriptor_set_in=/Users/XXX/image.bin --decode=models.tradingdto.TradingResultDTO
⚠️/Users/XXX/image.bin需要換成你的電腦路徑⚠️
(3)這樣就可以解析出json格式內容拉;
㈡ 如何解析返回的json格式數據
json數據格式解析我自己分為兩種;
一種是普通的,一種是帶有數組形式的;
普通形式的:
伺服器端返回的json數據格式如下:
復制代碼代碼如下:
{"userbean":{"Uid":"100196","Showname":"\u75af\u72c2\u7684\u7334\u5b50","Avtar":null,"State":1}}
分析代碼如下:
復制代碼代碼如下:
// TODO 狀態處理 500 200
int res = 0;
res = httpClient.execute(httpPost).getStatusLine().getStatusCode();
if (res == 200) {
/*
* 當返回碼為200時,做處理
* 得到伺服器端返回json數據,並做處理
* */
HttpResponse httpResponse = httpClient.execute(httpPost);
StringBuilder builder = new StringBuilder();
BufferedReader bufferedReader2 = new BufferedReader(
new InputStreamReader(httpResponse.getEntity().getContent()));
String str2 = "";
for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2
.readLine()) {
builder.append(s);
}
Log.i("cat", ">>>>>>" + builder.toString());
JSONObject jsonObject = new JSONObject(builder.toString())
.getJSONObject("userbean");
String Uid;
String Showname;
String Avtar;
String State;
Uid = jsonObject.getString("Uid");
Showname = jsonObject.getString("Showname");
Avtar = jsonObject.getString("Avtar");
State = jsonObject.getString("State");
帶數組形式的:
伺服器端返回的數據格式為:
復制代碼代碼如下:
{"calendar":
{"calendarlist":
[
{"calendar_id":"1705","title":"(\u4eb2\u5b50)ddssd","category_name":"\u9ed8\u8ba4\u5206\u7c7b","showtime":"1288927800","endshowtime":"1288931400","allDay":false},
{"calendar_id":"1706","title":"(\u65c5\u884c)","category_name":"\u9ed8\u8ba4\u5206\u7c7b","showtime":"1288933200","endshowtime":"1288936800","allDay":false}
]
}
}
分析代碼如下:
復制代碼代碼如下:
// TODO 狀態處理 500 200
int res = 0;
res = httpClient.execute(httpPost).getStatusLine().getStatusCode();
if (res == 200) {
/*
* 當返回碼為200時,做處理
* 得到伺服器端返回json數據,並做處理
* */
HttpResponse httpResponse = httpClient.execute(httpPost);
StringBuilder builder = new StringBuilder();
BufferedReader bufferedReader2 = new BufferedReader(
new InputStreamReader(httpResponse.getEntity().getContent()));
String str2 = "";
for (String s = bufferedReader2.readLine(); s != null; s = bufferedReader2
.readLine()) {
builder.append(s);
}
Log.i("cat", ">>>>>>" + builder.toString());
/**
* 這里需要分析伺服器回傳的json格式數據,
*/
JSONObject jsonObject = new JSONObject(builder.toString())
.getJSONObject("calendar");
JSONArray jsonArray = jsonObject.getJSONArray("calendarlist");
for(int i=0;i<jsonArray.length();i++){
JSONObject jsonObject2 = (JSONObject)jsonArray.opt(i);
CalendarInfo calendarInfo = new CalendarInfo();
calendarInfo.setCalendar_id(jsonObject2.getString("calendar_id"));
calendarInfo.setTitle(jsonObject2.getString("title"));
calendarInfo.setCategory_name(jsonObject2.getString("category_name"));
calendarInfo.setShowtime(jsonObject2.getString("showtime"));
calendarInfo.setEndtime(jsonObject2.getString("endshowtime"));
calendarInfo.setAllDay(jsonObject2.getBoolean("allDay"));
calendarInfos.add(calendarInfo);
}
總結,普通形式的只需用JSONObject ,帶數組形式的需要使用JSONArray 將其變成一個list。
㈢ 如何使用json_decode()解析json格式結果,想要圖片中的結果根據需要顯示出來
$resp->taobaoke_items->taobaoke_item[0]->click_url;
這個結果應該第一組的第一個url了
說明
$resp 表示json對象,也就是你print_r的東西
$resp->taobaoke_items 取出第一個對象
$resp->taobaoke_items->taobaoke_item 取出第一個對象下的第一個數組
$resp->taobaoke_items->taobaoke_item[0] 取出第一個對象下的第一個數組 的第一列
$resp->taobaoke_items->taobaoke_item[0]->click_url;
取出第一個對象下的第一個數組 的第一列的第一個數據
建議
現將數組取出來
再依次取數據,可以減少這么長度
$fields=array();//定義一個數組
$fields=$resp->taobaoke_items->taobaoke_item;//從JSON對象中取出數組
foreach($fields as $key=>$object){ //遍歷二維數組
echo 'click_url='. $object->click_url;
echo 'titlel='. $object->title;
以下省略
}
㈣ pb 調用http 介面問題,返回值JSON格式,怎麼獲取返回值
使用ajax進行 JSONP跨域請求,因為被請求的對方的回調函數名稱是無法修改。而這邊頁面中會出現多個不同JSONP請求,但他們的回調函數名稱都是同一個,_Callback。
㈤ 解析json是什麼意思
JSON(JavaScriptObject Notation, JS 對象簡譜) 是一種輕量級的數據交換格式。它基於ECMAScript(歐洲計算機協會制回定的js規范)的一個子集,采答用完全獨立於編程語言的文本格式來存儲和表示數據。
簡潔和清晰的層次結構使得 JSON成為理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網路傳輸效率。
(5)pbjson結果解析擴展閱讀:
任何支持的類型都可以通過 JSON 來表示,例如字元串、數字、對象、數組等。但是對象和數組是比較特殊且常用的兩種類型。
對象:對象在 JS 中是使用花括弧包裹 {} 起來的內容,數據結構為 {key1:value1, key2:value2, ...} 的鍵值對結構。在面向對象的語言中,key 為對象的屬性,value 為對應的值。鍵名可以使用整數和字元串來表示。值的類型可以是任意類型。
㈥ PB怎麼獲取json返回的值
pb本身是不能處理json數據的,你這數據來自哪裡?如果是瀏覽器,你可以用js處理成字元串通過pb與瀏覽器的介面返回給pb
㈦ pb 調用http 介面問題,返回值JSON格式,怎麼獲取返回值
你用ajax的話會出現跨域問題,這個介面是支持jsonp的,請使用jsonp,在你的請求地址後邊加上&callback=jsonpcallback,jsonpcallback是你的回調函數名字
㈧ 請教,有用pb解析JSON的方法例子么
採用pb12來實現,做一個.net 應用,然後嵌入.net代碼,具體的.net代碼可以參考以下鏈接
http://gaoling386.blog.163.com/blog/static/5404602420127106123193/
僅供參考。
㈨ 請教,有用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 al '
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 ret<>1 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
㈩ pb 調用http 介面問題,返回值JSON格式,怎麼獲取返回值
介面只有
HTTP的
介面說明
EXLIVE開放平台增加動態數據介面,主要以JSON格式返回車輛當前位置數據、軌跡回放數據等等車輛動態信息
(1)信息內容為json格式,必須採用UTF-8編碼。(建議提交方式為post方法,可以避免漢字亂碼問題)
HT請求TP例子:
C# code?
1
http://60.195.248.67:89/gpsonline/GPSAPI?version=1&method=loginSystem&name=sunyan&pwd=123456
返回格式:
C# code?
1
2
3
4
5
6
{
"version":1,
"success":true,
"uid":2103811,
"uKey":""
}
我目前用的POSTURL 來寫的
但是不知道怎麼獲取返回的 JSON格式的值
目前寫的代碼
C# code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 = "http://125.64.14.211:89/gpsonline/GPSAPI?"
ls_args = "version=1&method=loginSystem&name=hds&pwd=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