热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用VB从JSON中的重复元素获取值

我正在尝试使用MicrosoftComputervision和BluePrism(RPA工具)从图像中提取文本。我有一个如

我正在尝试使用microsoft Computer vision和Blue Prism(RPA工具)从图像中提取文本。我有一个如下的JSON响应:

{
"status": "Succeeded","recognitionResults": [{
"page": 1,"clockwiseOrientation": 0.76,"width": 1700,"height": 2200,"unit": "pixel","lines": [{
"boundingBox": [691,55,854,57,853,78,690,76],"text": "Display Record","words": [{
"boundingBox": [695,56,775,776,77,695,"text": "Display"
},{
"boundingBox": [783,58,79,783,78],"text": "Record"
}]
},{
"boundingBox": [57,102,397,107,396,130,126],"text": "Customer Number . . 0012343345","words": [{
"boundingBox": [60,103,153,106,127,60,124],"text": "Customer"
},{
"boundingBox": [160,230,129,160,128],"text": "Number"
},{
"boundingBox": [242,108,256,255,241,129],"text": "."
},{
"boundingBox": [264,278,264,{
"boundingBox": [284,284,130],"text": "0012343345"
}]
},{
"boundingBox": [685,110,1126,115,1125,140,684,136],"text": "Short Name . . . . . . SHOES AND THINGS","words": [{
"boundingBox": [685,111,742,114,135,685,133],"text": "Short"
},{
"boundingBox": [749,798,116,137,749,135],"text": "Name"
},{
"boundingBox": [808,117,823,808,137],{
"boundingBox": [830,844,138,830,138],{
"boundingBox": [851,118,866,851,{
"boundingBox": [874,889,139,874,139],{
"boundingBox": [897,912,119,897,{
"boundingBox": [919,933,919,{
"boundingBox": [940,999,940,"text": "SHOES"
},{
"boundingBox": [1005,1042,1005,"text": "AND"
},{
"boundingBox": [1051,1121,1051,"text": "THINGS"
}]
},132,366,365,159,155],"text": "Name . . . SHOES AND THINGS","words": [{
"boundingBox": [59,109,134,156,{
"boundingBox": [118,133,157,156],{
"boundingBox": [141,155,157],{
"boundingBox": [163,178,163,{
"boundingBox": [183,243,136,158,182,{
"boundingBox": [249,287,286,249,158],{
"boundingBox": [296,296,{
"boundingBox": [682,930,143,929,167,682,163],"text": "Legal Residence Code .","words": [{
"boundingBox": [683,141,743,"text": "Legal"
},855,164,748,"text": "Residence"
},{
"boundingBox": [862,144,911,146,910,165,861,164],"text": "Code"
},{
"boundingBox": [920,147,148,166,918,166],"text": "."
}]
},279,1066,1065,305,301],"text": "Date of Registration/ Incorporation",280,729,281,728,301,"text": "Date"
},{
"boundingBox": [737,763,282,762,736,"text": "of"
},{
"boundingBox": [771,913,303,770,"text": "Registration/"
},{
"boundingBox": [917,1063,285,1061,916,303],"text": "Incorporation"
}]
},{
"boundingBox": [1083,1192,1191,307,1082,305],"text": "2/14/2016","words": [{
"boundingBox": [1094,1094,"text": "2/14/2016"
}]
},326,454,332,453,356,350],"text": "Email Addr SHOESANDTHINGS@YAHOO . COM","words": [{
"boundingBox": [58,327,328,351,"text": "Email"
},{
"boundingBox": [125,174,329,173,352,124,351],"text": "Addr"
},{
"boundingBox": [181,402,333,354,181,352],"text": "SHOESANDTHINGS@YAHOO"
},{
"boundingBox": [407,412,334,411,355,407,355],{
"boundingBox": [416,451,416,"text": "COM"
}]
},{
"boundingBox": [680,335,951,338,950,359,679,356],"text": "Customer Risk Class . N","words": [{
"boundingBox": [681,336,772,358,681,{
"boundingBox": [781,827,337,781,358],"text": "Risk"
},{
"boundingBox": [837,896,339,837,"text": "Class"
},340,357,{
"boundingBox": [936,949,937,357],"text": "N"
}]
},{
"boundingBox": [54,236,383,53,380],"text": "National ID Nbr","words": [{
"boundingBox": [57,381,"text": "National"
},{
"boundingBox": [161,185,184,382,381],"text": "ID"
},{
"boundingBox": [191,360,190,382],"text": "Nbr","confidence": "Low"
}]
},{
"boundingBox": [676,362,757,756,387,675,"text": "Remarks","words": [{
"boundingBox": [680,364,369,386,680,384],"text": "Remarks"
}]
},{
"boundingBox": [58,388,408,406],"text": "Tax ID Cert",93,59,"text": "Tax"
},{
"boundingBox": [104,126,104,407],{
"boundingBox": [136,183,389,"text": "Cert"
}]
},390,925,924,417,412],"text": "Originating Branch . .",392,805,395,804,415,410],"text": "Originating"
},{
"boundingBox": [814,881,813,415],"text": "Branch"
},{
"boundingBox": [895,907,906,895,416],917,{
"boundingBox": [952,994,414,953,413],"text": "126","words": [{
"boundingBox": [960,993,413,960,"text": "126"
}]
},{
"boundingBox": [1030,394,1376,1375,420,1029,417],"text": "Date Last Tagged . . 2/04/2019","words": [{
"boundingBox": [1035,1083,1035,{
"boundingBox": [1091,1138,1139,418,1091,"text": "Last"
},{
"boundingBox": [1148,1217,398,419,1149,418],"text": "Tagged"
},{
"boundingBox": [1227,1239,1240,1227,419],{
"boundingBox": [1249,1262,1249,{
"boundingBox": [1281,1281,420],"text": "2/04/2019"
}]
},{
"boundingBox": [51,214,213,435,50,433],"text": "Tax ID Number",92,434,434],{
"boundingBox": [103,125,{
"boundingBox": [134,205,203,436,435],"text": "Number"
}]
},{
"boundingBox": [282,470,469,440,438],"text": ". 11110201201900","words": [{
"boundingBox": [295,306,293,436],{
"boundingBox": [315,468,314,"text": "11110201201900"
}]
},{
"boundingBox": [546,719,718,441,545,"text": "Present Address","words": [{
"boundingBox": [548,628,627,547,"text": "Present"
},{
"boundingBox": [636,421,635,440],"text": "Address"
}]
},{
"boundingBox": [1022,1493,425,1492,1021,446],"text": "Permanent Bus. Addr (Same as Present Y Y/N)","words": [{
"boundingBox": [1025,424,1127,444,1024,443],"text": "Permanent"
},{
"boundingBox": [1136,1185,1184,1135,444],"text": "Bus."
},{
"boundingBox": [1192,1236,1235,445,1190,{
"boundingBox": [1240,1294,1292,446,445],"text": "(Same"
},{
"boundingBox": [1303,1328,1327,447,1302,"text": "as"
},{
"boundingBox": [1337,1417,1415,449,1335,447],{
"boundingBox": [1426,1439,1437,450,1425,449],"text": "Y"
},{
"boundingBox": [1448,1490,1446,450],"text": "Y/N)"
}]
},{
"boundingBox": [52,232,442,231,464,51,461],"text": "SSS/GSIS Number.",150,149,462,462],"text": "SSS/GSIS"
},{
"boundingBox": [157,"text": "Number."
}]
},{
"boundingBox": [299,437,443,465,298,464],"text": "44402012019","words": [{
"boundingBox": [316,466,"text": "44402012019"
}]
},{
"boundingBox": [545,712,711,466],"text": "UNI1206 2ND FLR","words": [{
"boundingBox": [547,629,467,"text": "UNI1206"
},{
"boundingBox": [637,673,637,467],"text": "2ND"
},{
"boundingBox": [681,448,468],"text": "FLR"
}]
},472,472],1107,471,1025,473],"text": "UNI1206","confidence": "Low"
},{
"boundingBox": [1114,1151,1152,1115,471],{
"boundingBox": [1158,1159,{
"boundingBox": [55,200,199,488,54,487],"text": "Branch Number","words": [{
"boundingBox": [56,489,{
"boundingBox": [135,201,489],{
"boundingBox": [332,490,491],"text": "12","words": [{
"boundingBox": [337,361,490],{
"boundingBox": [551,914,475,499,550,495],"text": "(Unit/House No.,Street,Subd/Bgy . )","words": [{
"boundingBox": [552,674,476,672,496,551,"text": "(Unit/House"
},{
"boundingBox": [680,713,678,496],"text": "No."
},{
"boundingBox": [717,722,720,716,"text": ","
},{
"boundingBox": [726,791,477,789,497,725,"text": "Street"
},{
"boundingBox": [795,800,793,497],{
"boundingBox": [804,891,802,"text": "Subd/Bgy"
},{
"boundingBox": [896,900,898,893,499],{
"boundingBox": [905,500,902,500],"text": ")"
}]
},1388,481,1387,505,Subd/Bgy. )","words": [{
"boundingBox": [1030,479,502,1030,{
"boundingBox": [1157,1189,480,1188,503,1156,502],{
"boundingBox": [1193,1198,1193,503],{
"boundingBox": [1202,1276,1275,504,1202,"text": "Street,{
"boundingBox": [1280,483,1280,504],"text": "Subd/Bgy."
},{
"boundingBox": [1381,1381,505],{
"boundingBox": [62,495,197,196,519,61,516],"text": "SAMSON ROAD","words": [{
"boundingBox": [68,498,517,68,"text": "SAMSON"
},{
"boundingBox": [147,192,191,518],"text": "ROAD"
}]
},501,862,525,544,523],"text": "SHOPPESVILLE PLUS GREENHILLS",524,548,"text": "SHOPPESVILLE"
},{
"boundingBox": [693,739,692,524],"text": "PLUS"
},{
"boundingBox": [748,747,"text": "GREENHILLS"
}]
},506,1344,509,1343,531,528],1162,530,"text": "SHOPPESVILLE",{
"boundingBox": [1170,1218,510,1170,530],{
"boundingBox": [1224,1340,511,1341,529,1224,233,546],"text": "Primary Officer",526,547],"text": "Primary"
},227,548],"text": "Officer"
}]
},{
"boundingBox": [279,527,347,528,346,549,549],"text": ". 126",304,{
"boundingBox": [314,533,313,544],{
"boundingBox": [552,702,532,701,552,"text": "(District,Town",655,",{
"boundingBox": [659,659,551],"text": "Town"
}]
},{
"boundingBox": [1026,537,560,554],Town)","words": [{
"boundingBox": [1028,1132,1133,558,1028,555],{
"boundingBox": [1137,1183,539,558],"text": "Town)"
}]
},188,555,577,573],"text": "access Code",553,554,575,"text": "access"
},575],"text": "Code"
}]
},{
"boundingBox": [312,368,557,573,310,568],367,570],{
"boundingBox": [548,556,578,576],"text": "SAN JUAN CITY",582,583,577],"text": "SAN"
},{
"boundingBox": [592,638,639,593,"text": "JUAN"
},{
"boundingBox": [647,696,648,"text": "CITY"
}]
},{
"boundingBox": [1027,562,1171,565,586,1026,582],"words": [{
"boundingBox": [1027,1058,563,1059,1027,{
"boundingBox": [1070,564,584,1071,583],{
"boundingBox": [1125,567,585,584],{
"boundingBox": [56,581,605,602],"text": "Citizenship",587,"text": "Citizenship"
}]
},{
"boundingBox": [547,617,616,607,546,604],"text": "(city)","words": [{
"boundingBox": [549,588,1093,591,1092,614,611],590,1090,611,"text": "(city)"
}]
},606,609,631,628],"text": "Customer Class .",608,629],217,216,{
"boundingBox": [228,631],{
"boundingBox": [549,612,634],"text": "PHILIPPInes",613,633],"text": "PHILIPPInes"
}]
},{
"boundingBox": [1023,1154,618,1153,640,1022,637],"words": [{
"boundingBox": [1024,619,638],234,661,656],"text": "Market Segment .",656,657],"text": "Market"
},642,212,660,"text": "Segment"
},{
"boundingBox": [227,643,644,225,661],745,744,666,"text": "(Province,Country)",645,646,664,"text": "(Province"
},{
"boundingBox": [649,650,664],746,"text": "Country)"
}]
},{
"boundingBox": [1028,1226,669,665],1130,1131,667,667],{
"boundingBox": [1135,647,{
"boundingBox": [49,662,266,668,265,49,684],"text": "Solicitable Code .",665,686,"text": "Solicitable"
},238,670,688,686],671,262,260,248,689],726,"text": "Zip Code 1900 -",579,689,687],"text": "Zip"
},{
"boundingBox": [591,636,691,{
"boundingBox": [658,703,658,691],"text": "1900"
},{
"boundingBox": [714,714,692],"text": "-"
}]
},{
"boundingBox": [1020,1199,1019,694],{
"boundingBox": [1068,1116,1068,695],1136,696],{
"boundingBox": [46,320,319,45,742],"text": "F2=View Last Maintenance","words": [{
"boundingBox": [46,721,723,123,46,740],"text": "F2=View"
},180,724,744],{
"boundingBox": [189,745],"text": "Maintenance"
}]
},{
"boundingBox": [354,492,491,353,743],"text": "F8=Loan Data","words": [{
"boundingBox": [357,"text": "F8=Loan"
},{
"boundingBox": [445,"text": "Data"
}]
},{
"boundingBox": [699,976,975,751,698,747],"text": "F10=Owners/Beneficiaries","words": [{
"boundingBox": [702,971,731,970,"text": "F10=Owners/Beneficiaries"
}]
},{
"boundingBox": [1033,1145,752,1032,750],"text": "F12=Cancel",732,753,"text": "F12=Cancel"
}]
},{
"boundingBox": [44,750,294,771,772],"text": "F7=User Defined Fields",769],"text": "F7=User"
},{
"boundingBox": [133,"text": "Defined"
},{
"boundingBox": [223,769,224,771],"text": "Fields"
}]
},{
"boundingBox": [355,754,"text": "F9=FATCA/Substantial Owners",774,"text": "F9=FATCA/Substantial"
},{
"boundingBox": [590,774],"text": "Owners"
}]
},{
"boundingBox": [695,780,694,775],"text": "F11=Alternate Address Data","words": [{
"boundingBox": [701,849,848,778,700,776],"text": "F11=Alternate",{
"boundingBox": [856,939,758,938,779,778],"text": "Address"
},{
"boundingBox": [945,760,944,779],{
"boundingBox": [1035,1238,759,1237,1034,777],"text": "F16=High Risk Type",1124,"text": "F16=High"
},{
"boundingBox": [1134,1181,1134,{
"boundingBox": [1191,780],"text": "Type"
}]
}]
}]
}

我想获取属性文本的值(“邮政编码1900-”),但是还有另一个具有相同名称的属性。您能否帮助我如何使用VB仅提取响应中各行下的文本?例如,我想像下面这样提取

显示记录
顾客号码 。 。 0012343345
简称 。 。 。 。 。 。鞋子和东西

下面是我的代码

Dim ocrProperties As azureOcrJsOnProperty= JsonConvert.DeserializeObject(Of azureOcrJsonProperty)(JsonReponse)
For Each item As PropertyInfo In ocrProperties.GetType.GetProperties()
If item.PropertyType.Isnested Then
Dim TypeHolder as Type = item.Getvalue(ocrProperties)
For Each subitem As PropertyInfo In TypeHolder.GetType.GetProperties()
Formatted_JSon = subitem.Name & ": " & subitem.Getvalue(TypeHolder).ToString
Next
Else
Formatted_JSon = item.Name & ": " & item.Getvalue(ocrProperties).ToString
End If
Next

Public Class azureOcrJsonProperty
Public Property status As String
Public Property recognitionResults As recognitionResults
End Class
Public Class recognitionResults
Public Property page As Integer
Public Property clockwiseOrientation As decimal
Public Property width As Integer
Public Property height As Integer
Public Property unit As String
Public Property lines As lines
End Class
Public Class lines
Public Property boundingBox As String()
Public Property text As decimal
Public Property words As words
End Class
Public Class words
Public Property boundingBox As String()
Public Property text As decimal
End Class

我遇到错误了

无法将当前JSON数组(例如[1,2,3])反序列化为类型'Get_Customer_Info + recognitionResults',因为该类型需要JSON对象(例如{“ name”:“ value”})才能正确反序列化。
要解决此错误,可以将JSON更改为JSON对象(例如{“ name”:“ value”}),也可以将反序列化类型更改为数组,或者将实现集合接口的类型(例如ICollection,IList)更改为List,例如List从JSON数组反序列化。还可以将JsonArrayAttribute添加到类型中,以强制其从JSON数组反序列化。
路径“ recognitionResults”,第1行,位置44。


JSON结构本身非常简单,请参阅本页底部的结果类模型。
主类( OcrResults )公开了执行标准的 Serialize() Deserialize(json As String) 公共方法操作。

要反序列化JSON,请按以下方式调用Deserialize()方法:

Dim ocrResults = New OcrResults()
Dim ocrObjects = ocrResults.Deserialize(json)

Dim ocrObjects = New OcrResults(json).Deserialize()

可以修改生成的类对象并将其序列化回原始JSON结构(如果需要),调用Serialize()方法:

Dim ocrResults = New OcrResults()
Dim ocrObjects = ocrResults.Deserialize(json)
'(...)
Dim newJson As String = ocrResults.Serialize(ocrObjects)

由于此JSON包含OCR过程的结果-将识别的文本的边界多边形引用为整数数组-我添加了(略微 verbose ){{1} }( JsonConverter ),将整数数组转换为BoundingBoxConverter结构的数组(并在序列化类模型时转换为整数数组)。

如果/在识别的文本部分周围绘制多边形时,这消除了一个步骤(通常,作为Point类的图形类接受GraphicsPath / Point的数组作为参数)。


反序列化对象的 PointF 属性是Lines类。
每个List(Of Line)属性都包含完整的已识别文本序列,而Line().Text列表包含同一序列的单个部分。

可以使用LINQ查询以不同方式提取整行。
例如,如问题中所述,这些行:

Line().Words()

可以提取为:

Display Record Customer Number . . 0012343345 Short Name . . . . . . SHOES AND THINGS

Dim ocrObjects = New OcrResults(json).Deserialize()
Dim searchResult = ocrObjects.RecognitionResults.
SelectMany(Function(r) r.Lines.
SkipWhile(Function(ln) Not ln.Text.Contains("Display Record")).
TakeWhile(Function(ln) Not ln.Text.StartsWith("Name"))).ToList()
列表按顺序包含从searchResultLine开始的所有"Display Record"对象。

要打印结果:

"Short Name . . . . . . SHOES AND THINGS"

等同于:

Console.WriteLine(String.Join(" ",searchResult.Select(Function(ln) ln.Text)))

提取第一个 For Each line As OcrResults.Line In searchResult
Console.Write(line.Text)
Next
对象,其中Text属性包含Line

"Zip Code 1900"

或将第一个识别出的 Page 分配给新对象,因此您可以直接使用其 Dim zipCode = ocrObjects.RecognitionResults.
SelectMany(Function(r) r.Lines).
First(Function(ln) ln.Text.Contains("Zip Code 1900"))
Dim zipCodeText = zipCode.Text
Dim zipPoints = zipCode.BoundingBox
对象:

Lines


绘制文本部分:

每行可识别的文本指定包含字符串的多边形。
绘制与每个文本行(其中

之一)的Point结构的 Dim ocrFirstPage = ocrObjects.RecognitionResults(0)
Dim zipCode = ocrFirstPage.Lines.
First(Function(ln) ln.Text.Contains("Zip Code 1900"))
Dim zipCodeText = zipCode.Text
Dim zipPoints = zipCode.BoundingBox
数组相对应的Polygons

每个boundingBox类都有一个 OcrObjects.RecognitionResults 属性,该属性定义了由OCR标识的文本的旋转角度。
该角度可用于旋转图形(或最终使多边形变直)。

例如,使用Windows Forms ClockwiseOrientation控件作为画布,并使用GraphicsPath作为Polygons的容器:

PictureBox

这将绘制前5个多边形,得到以下结果:

Json OCR Results


Dim ocrObjects As OcrResults.Results = Nothing
' (...)
' Somewhere...
ocrObjects = New OcrResults(json).Deserialize()
PictureBox1.Invalidate()
' (...)
Private Sub PictureBox1_Paint(sender As Object,e As PaintEventArgs) Handles PictureBox1.Paint
If ocrObjects Is Nothing Then Return
Dim ocr = ocrObjects.RecognitionResults(0)
'Dim angle As Single = Convert.ToSingle(ocr.ClockwiseOrientation)
Using path As GraphicsPath = New GraphicsPath
For i As Integer = 0 To 4
path.AddPolygon(ocr.Lines(i).BoundingBox)
Next
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias
'e.Graphics.RotateTransform(-angle)
e.Graphics.DrawPath(Pens.Red,path)
End Using
End Sub
类模型

OcrResults

推荐阅读
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
author-avatar
平平您好
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有