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