Python 如何从不完整且重复的json字符串中提取数据?

Python 如何从不完整且重复的json字符串中提取数据?,python,json,Python,Json,我有一个来自TCP/IP套接字的JSON字符串,如下所示: res = 'atus": "OK"}{"pos": {"q0": 1.00, "q1": -0.00}}{"status": "OK"}{"pos": {"q0": 2.00, "q1": -1.00}}{"status": &

我有一个来自TCP/IP套接字的JSON字符串,如下所示:

res = 'atus": "OK"}{"pos": {"q0": 1.00, "q1": -0.00}}{"status": "OK"}{"pos": {"q0": 2.00, "q1": -1.00}}{"status": "OK"}{"pos": {"q0": 3.00,'
它总是至少包含一个完整的“pos”项,我想提取最后一个“pos”项的值,如示例所示

q0 = 2.00
q1 = -1.00

有下降的方法吗?

这应该可以解决问题,但这是非常具体的问题,取决于该套接字上可能的数据:

pos_strings=[x代表res.split('}{')[1:-1]如果x[0:6]=''pos:']
pos_object=json.load('{%s}'%pos_strings[-1])
q0=pos_对象['pos']['q0']
q1=pos_对象['pos']['q1']

这应该可以解决问题,但这是非常具体的问题,取决于该套接字上可能的数据:

pos_strings=[x代表res.split('}{')[1:-1]如果x[0:6]=''pos:']
pos_object=json.load('{%s}'%pos_strings[-1])
q0=pos_对象['pos']['q0']
q1=pos_对象['pos']['q1']

我看到的最简单的方法是使用正则表达式:

q0,q1=map(float,re.findall(r'{“pos”:{“q0”:(-\d+\.\d+),q1:(-\d+\.\d+}),res)[-1])
详细说明两个主要步骤:

  • 首先,我们从每个完整的JSON中提取每个
    q0
    q1
    对:
  • 然后,我们将最后一对抛向浮动:
q0,q1=map(浮点,成对[-1])

我看到的最简单的方法是使用正则表达式:

q0,q1=map(float,re.findall(r'{“pos”:{“q0”:(-\d+\.\d+),q1:(-\d+\.\d+}),res)[-1])
详细说明两个主要步骤:

  • 首先,我们从每个完整的JSON中提取每个
    q0
    q1
    对:
  • 然后,我们将最后一对抛向浮动:
q0,q1=map(浮点,成对[-1])
您可以试试

重新导入
res='“atus”:“OK”{“pos”:{“q0”:1.00,“q1”:-0.00}{“status”:“OK”}{“pos”:{“q0”:2.00,“q1”:-1.00}{“status”:“OK”{“pos”:{“q0”:3.00,”
q0,q1=[findall(r'{“pos”:{“q0”:([+-]?(?:[0-9]*[.])?[0-9]+],“q1:([+-]?(?:[0-9]*[.])?[0-9]+])res中i的浮点数[-1]]
打印(q0,q1)
你可以试试

重新导入
res='“atus”:“OK”{“pos”:{“q0”:1.00,“q1”:-0.00}{“status”:“OK”}{“pos”:{“q0”:2.00,“q1”:-1.00}{“status”:“OK”{“pos”:{“q0”:3.00,”
q0,q1=[findall(r'{“pos”:{“q0”:([+-]?(?:[0-9]*[.])?[0-9]+],“q1:([+-]?(?:[0-9]*[.])?[0-9]+])res中i的浮点数[-1]]
打印(q0,q1)
  • 在第一个打开的卷曲括号处切片
  • 第一次切片打开/关闭卷曲括号
  • 在第一个打开的卷曲括号处切片
  • 第一次切片打开/关闭卷曲括号

另一个正则表达式解决方案-如果只有pos字典有一个值字典,字符串中有一个double
}
,它就可以工作

import json
p = r'{[^}]+}}'
pos = re.findall(p,string_in_question)
print(json.loads(pos[-1]))

另一个正则表达式解决方案-如果只有pos字典有一个值字典,字符串中有一个double
}
,它就可以工作

import json
p = r'{[^}]+}}'
pos = re.findall(p,string_in_question)
print(json.loads(pos[-1]))

你的意思是<代码>的意思是<代码>的“美国”的意思意思是“你的意思意思是<代码>你的意思是<代码>的意思是“你的意思是”的意思是<代码>的意思是<代码>的意思是<你的意思是<代码>的意思是“你的意思是<你的意思是<代码>的意思是“{”的意思是“{”的意思是“{”的意思是“{”的意思是“{”的意思是“美国”的意思是“你你的意思是“你的意思是”的意思是“你的意思意思是“你的意思意思是“你的意思是”的意思意思是“你的意思意思是”的意思意思是“你的意思意思是“美国”的意思是”的意思意思是““““““““““<<<”的意思是”的意思是”的意思是”的意思是”的意思意思是”的意思是”的意思是“{“状态”:“确定”}{“位置”:{“q0”“:3.00,”?@Epsi95抱歉。问题中已更正。
res = '''res = "atus": "OK"}{"pos": {"q0": 1.00, "q1": -0.00}}{"status": "OK"}{"pos": {"q0": 2.00, "q1": -1.00}}{"status": "OK"}{"pos": {"q0": 3.00,"'''

res = res[res.index("{"):]
json.loads(res[:res.index("}{")+1])
import json
p = r'{[^}]+}}'
pos = re.findall(p,string_in_question)
print(json.loads(pos[-1]))